下面是我用matlab编的程序
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函数解不了
然后又试做用1stOp求解,虽然能运行,但结果不对:
Parameters x1[63.75,84.75],x2[61.2,81.36],x3[66.3,88.14],x4[72.25,96.05],x5[78.2,103.96],x6[76.44,100.8],x7[63.7,84],x8[88.27,116.4],x9[82.81,109.2],x10[69.16,91.2],x11[79.2,102.08],x12[54,69.6],x13[67.5,87],x14[54.9,70.76],x15[69.3,89.32];
MinFunction 3.2*abs(75-x1)+2*abs(72-x2)+3.8*abs(78-x3)+5*abs(85-x4)+4.1*abs(92-x5)+2*abs(84-x6)+3.2*abs(70-x7)+5.2*abs(97-x8)+4.8*abs(91-x9)+6*abs(76-x10)+2*abs(88-x11)+2.8*abs(60-x12)+4.5*abs(75-x13)+5.4*abs(61-x14)+7*abs(77-x15);
x1+x6+x11<=230;
x2+x7+x12<=230;
x3+x8+x13<=230;
x4+x9+x14<=230;
x5+x10+x15<=230;
x1+x2+x3+x4+x5=402;
x6+x7+x8+x9+x10=418;
x11+x12+x13+x14+x15=361;
====== 结果 ======
迭代数: 5765
计算用时(时:分:秒:毫秒): 00:00:48:719
计算中止原因: 达到收敛判定标准
优化算法: 模拟退火
开始温度: 53154.39654
函数表达式: 3.2*abs(75-x1)+2*abs(72-x2)+3.8*abs(78-x3)+5*abs(85-x4)+4.1*abs(92-x5)+2*abs(84-x6)+3.2*abs(70-x7)+5.2
*abs(97-x8)+4.8*abs(91-x9)+6*abs(76-x10)+2*abs(88-x11)+2.8*abs(60-x12)+4.5*abs(75-x13)+5.4*abs(61-x14)
+7*abs(77-x15)
目标函数值(最小): 3100160.21770307
x1: 71.5689389735799
x2: 81.0062299194088
x3: 72.5448532121182
x4: 84.9863537500638
x5: 91.8936191767787
x6: 76.7861536278007
x7: 79.9894318405732
x8: 96.1444866168597
x9: 89.0802911691291
x10: 75.9996351633804
x11: 81.6476331660161
x12: 69.0043403420836
x13: 72.4384599937107
x14: 60.909790474485
x15: 76.9997694558779
约束函数
1: x1+x6+x11-(230) = 0.002725767397
2: x2+x7+x12-(230) = 2.102065594E-6
3: x3+x8+x13-(230) = 11.12779982
4: x4+x9+x14-(230) = 4.976435394
5: x5+x10+x15-(230) = 14.8930238
6: x1+x2+x3+x4+x5-(402) = -4.968050575E-6
7: x6+x7+x8+x9+x10-(418) = -1.5822568E-6
8: x11+x12+x13+x14+x15-(361) = -6.567826745E-6
====== 计算结束 ======
现在老板催的急,恳请大家帮忙看看问题出在哪里?还有能不能用其它软件求解?