lizard 发表于 2008-3-10 15:15

用matlab解非线性优化遇到难题

这是一个目标函数带有绝对值约束的非线性规划模型,借助matlab的非线性有约束的多元函数可以求解。但本人对matlab一窍不通,恳求大家帮忙
int m;         %定义分m个工程
int n;         %定义每个工程分n天
int s;         %定义单日进料量
float d;   %定义某分项工程某天的需求量
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=;
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=;% 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=;
%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);
=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 编辑 ]

sigma665 发表于 2008-3-10 15:19

原帖由 lizard 于 2008-3-10 15:15 发表 http://www.chinavib.com/forum/images/common/back.gif
这是一个目标函数带有绝对值约束的非线性规划模型,借助matlab的非线性有约束的多元函数可以求解。但本人对matlab一窍不通,恳求大家帮忙
int m;         %定义分m个工程
int n;         %定义每个工程分n天
int...


这个不是C语言
先找本基础书看以下吧

lizard 发表于 2008-3-10 15:27

回复 2楼 的帖子

前面的定义其实没什么用的,只是方便理解,对程序也不会有影响的。

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)=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);

这里漏掉了个]

lizard 发表于 2008-3-10 16:14

原帖由 sigma665 于 2008-3-10 15:32 发表 http://www.chinavib.com/forum/images/common/back.gif
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 ... 谢谢提醒,复制时漏掉了。这个程序是我参考一些书籍做的,本人才疏学浅,实在找不出问题在哪

sigma665 发表于 2008-3-10 18:32

原帖由 lizard 于 2008-3-10 16:14 发表 http://www.chinavib.com/forum/images/common/back.gif
谢谢提醒,复制时漏掉了。这个程序是我参考一些书籍做的,本人才疏学浅,实在找不出问题在哪

参考的那书不是matlab的吧。

前面的x没有定义。

lizard 发表于 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=;
c=;
x0=;
A=;
b=;
Aeq=;
beq=;
=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函数解不了
大家怎么认为?

dingd 发表于 2008-3-11 14:08

换1stOpt试一下,优化能力强、更简单也更容易理解些。
页: [1]
查看完整版本: 用matlab解非线性优化遇到难题