声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1725|回复: 7

[编程技巧] 用matlab解非线性优化遇到难题

[复制链接]
发表于 2008-3-10 15:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
这是一个目标函数带有绝对值约束的非线性规划模型,借助matlab的非线性有约束的多元函数可以求解。但本人对matlab一窍不通,恳求大家帮忙
int m;         %定义分m个工程
int n;         %定义每个工程分n天
int s;         %定义单日进料量
float d[m][n];   %定义某分项工程某天的需求量
float f;         %定义最小成本
m=3;
n=5;
s=200;
d=[1 2 3 4 5;
   2 3 4 5 6;
   3 4 5 6 7];
c=[1 2 3 4 5;
   2 3 4 5 6;
   3 4 5 6 7];
fun=c(1,1)*abs(d(1,1)-x(1))+c(1,2)*abs(d(1,2)-x(2))+c(1,3)*abs(d(1,3)-x(3))+c(1,4)*abs(d(1,4)-x(4))+c(1,5)*abs(d(1,5)-x(5))+c(2,1)*abs(d(2,1)-x(6))+c(2,2)*abs(d(2,2)-x(7))+c(2,3)*abs(d(2,3)-x(8))+c(2,4)*abs(d(2,4)-x(9))+c(2,5)*abs(d(2,5)-x(10))+c(3,1)*abs(d(3,1)-x(11))+c(3,2)*abs(d(3,2)-x(12))+c(3,3)*abs(d(3,3)-x(13))+c(3,4)*abs(d(3,4)-x(14))+c(3,5)*abs(d(3,5)-x(15));
x0=[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1];
A=[1 0 0 0 0 1 0 0 0 0 1 0 0 0 0;
   0 1 0 0 0 0 1 0 0 0 0 1 0 0 0;
   0 0 1 0 0 0 0 1 0 0 0 0 1 0 0;
   0 0 0 1 0 0 0 0 1 0 0 0 0 1 0;
   0 0 0 0 1 0 0 0 0 1 0 0 0 0 1];
b=[s s s s s];  % x(1)+x(6)+x(11)<s;
      %x(2)+x(7)+x(12)<s;
      %x(3)+x(8)+x(13)<s;
      %x(4)+x(9)+x(14)<s;
      %x(5)+x(10)+x(15)<s;
Aeq=[1 1 1 1 1 0 0 0 0 0 0 0 0 0 0;
      0 0 0 0 0 1 1 1 1 1 0 0 0 0 0;
      0 0 0 0 0 0 0 0 0 0 1 1 1 1 1];
beq=[d(1,1)+d(1,2)+d(1,3)+d(1,4)+d(1,5);d(2,1)+d(2,2)+d(2,3)+d(2,4)+d(2,5);d(3,1)+d(3,2)+d(3,3)+d(3,4)+d(3,5)];
%x(1)+x(2)+x(3)+x(4)+x(5)=d(1,1)+d(1,3)+d(1,3)+d(1,4)+d(1,5);
%x(6)+x(7)+x(8)+x(9)+x(10)=d(2,1)+d(2,2)+d(2,3)+d(2,4)+d(2,5);
%x(11)+x(12)+x(13)+x(14)+x(15)=d(3,1)+d(3,2)+d(3,3)+d(3,4)+d(3,5);
[x,fval]=fmincon(fun,x0,A,b,Aeq,beq)
出错提示
The string being specified was neither 'single' nor 'double'
The string being specified was neither 'single' nor 'double'
The string being specified was neither 'single' nor 'double'
The string being specified was neither 'single' nor 'double'
??? Undefined function or variable 'x'.

[ 本帖最后由 lizard 于 2008-3-10 16:16 编辑 ]
回复
分享到:

使用道具 举报

发表于 2008-3-10 15:19 | 显示全部楼层
原帖由 lizard 于 2008-3-10 15:15 发表
这是一个目标函数带有绝对值约束的非线性规划模型,借助matlab的非线性有约束的多元函数可以求解。但本人对matlab一窍不通,恳求大家帮忙
int m;         %定义分m个工程
int n;         %定义每个工程分n天
int  ...



这个不是C语言
先找本基础书看以下吧
 楼主| 发表于 2008-3-10 15:27 | 显示全部楼层

回复 2楼 的帖子

前面的定义其实没什么用的,只是方便理解,对程序也不会有影响的。
发表于 2008-3-10 15:32 | 显示全部楼层
beq=[d(1,1)+d(1,2)+d(1,3)+d(1,4)+d(1,5);d(2,1)+d(2,2)+d(2,3)+d(2,4)+d(2,5);d(3,1)+d(3,2)+d(3,3)+d(3,4)+d(3,5);
%x(1)+x(2)+x(3)+x(4)+x(5)=d(1,1)+d(1,3)+d(1,3)+d(1,4)+d(1,5);
%x(6)+x(7)+x(8)+x(9)+x(10)=d(2,1)+d(2,2)+d(2,3)+d(2,4)+d(2,5);
%x(11)+x(12)+x(13)+x(14)+x(15)=d(3,1)+d(3,2)+d(3,3)+d(3,4)+d(3,5);

这里漏掉了个]
 楼主| 发表于 2008-3-10 16:14 | 显示全部楼层
原帖由 sigma665 于 2008-3-10 15:32 发表
beq=[d(1,1)+d(1,2)+d(1,3)+d(1,4)+d(1,5);d(2,1)+d(2,2)+d(2,3)+d(2,4)+d(2,5);d(3,1)+d(3,2)+d(3,3)+d(3,4)+d(3,5);
%x(1)+x(2)+x(3)+x(4)+x(5)=d(1,1)+d(1,3)+d(1,3)+d(1,4)+d(1,5);
%x(6)+x(7)+x(8)+x(9)+x(10 ...
谢谢提醒,复制时漏掉了。这个程序是我参考一些书籍做的,本人才疏学浅,实在找不出问题在哪
发表于 2008-3-10 18:32 | 显示全部楼层
原帖由 lizard 于 2008-3-10 16:14 发表
谢谢提醒,复制时漏掉了。这个程序是我参考一些书籍做的,本人才疏学浅,实在找不出问题在哪


参考的那书不是matlab的吧。

前面的x没有定义。
 楼主| 发表于 2008-3-11 13:48 | 显示全部楼层
谢谢大家的热情帮忙。
今天我重新修改了一下
myfun.m
function f = myfun(x)
f = 'c(1,1)*abs(d(1,1)-x(1))+c(1,2)*abs(d(1,2)-x(2))+c(1,3)*abs(d(1,3)-x(3))+c(1,4)*abs(d(1,4)-x(4))+c(1,5)*abs(d(1,5)-x(5))+c(2,1)*abs(d(2,1)-x(6))+c(2,2)*abs(d(2,2)-x(7))+c(2,3)*abs(d(2,3)-x(8))+c(2,4)*abs(d(2,4)-x(9))+c(2,5)*abs(d(2,5)-x(10))+c(3,1)*abs(d(3,1)-x(11))+c(3,2)*abs(d(3,2)-x(12))+c(3,3)*abs(d(3,3)-x(13))+c(3,4)*abs(d(3,4)-x(14))+c(3,5)*abs(d(3,5)-x(15))';
Untitled3.m
s=200;
d=[1 2 3 4 5;2 3 4 5 6;3 4 5 6 7];
c=[1 2 3 4 5;2 3 4 5 6;3 4 5 6 7];
x0=[1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;];
A=[1 0 0 0 0 1 0 0 0 0 1 0 0 0 0;0 1 0 0 0 0 1 0 0 0 0 1 0 0 0;0 0 1 0 0 0 0 1 0 0 0 0 1 0 0;0 0 0 1 0 0 0 0 1 0 0 0 0 1 0;0 0 0 0 1 0 0 0 0 1 0 0 0 0 1];
b=[s;s;s;s;s];
Aeq=[1 1 1 1 1 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 1 1 1 1 1 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 1 1 1 1 1];
beq=[d(1,1)+d(1,2)+d(1,3)+d(1,4)+d(1,5);d(2,1)+d(2,2)+d(2,3)+d(2,4)+d(2,5);d(3,1)+d(3,2)+d(3,3)+d(3,4)+d(3,5)];
[x,fval]=fmincon(@myfun,x0,A,b,Aeq,beq);
结果出现一下提示
Warning: Large-scale (trust region) method does not currently solve this type of problem,
switching to medium-scale (line search).
> In E:\MATLAB6p5\toolbox\optim\fmincon.m at line 213
  In e:\MATLAB6p5\work\myfun.m at line 2
  In E:\MATLAB6p5\toolbox\optim\fmincon.m at line 288
  In e:\MATLAB6p5\work\Untitled3.m at line 9
2   f = c(1,1)*abs(d(1,1)-x(1))+c(1,2)*abs(d(1,2)-x(2))+c(1,3)*abs(d(1,3)-x(3))+c(1,4)*abs(d(1,4)-x(4))+c(1,5)*abs(d(1,5)-x(5))+c(2,1)*abs(d(2,1)-x(6))+c(2,2)*abs(d(2,2)-x(7))+c(2,3)*abs(d(2,3)-x(8))+c(2,4)*abs(d(2,4)-x(9))+c(2,5)*abs(d(2,5)-x(10))+c(3,1)*abs
我怀疑是目标函数过长,fmincon函数解不了
大家怎么认为?
发表于 2008-3-11 14:08 | 显示全部楼层
换1stOpt试一下,优化能力强、更简单也更容易理解些。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-23 15:33 , Processed in 0.066125 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表