Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
初级会员
注册日期: 2008-01-25
年龄: 51
帖子: 2
声望力: 0 ![]() |
![]()
我利用fmincon函数在做一个工程优化时,遇到这样一个问题:初次优化matlab运算的很慢,大约两个小时才运算完毕,提示“Maximum number of function evaluations exceeded”。
然后我做了如下处理:1、我把MaxFunEvals 和MaxIter 都加大了3倍 2、我把得到的结果作为新的初值 再次运算整整24小时没有结果,不知道大家遇到这种情况没有,希望高手帮忙!先谢了 程序如下: %目标函数 function f_X=f(X) f_X=((X(1)+X(2)+X(3)+X(4)+X(5)+X(6)+X(7)+X(8)+X(9))/391.32-0.05)^2+((X(10)+X(11)+X(12)+X(13)+X(14)+X(15)+X(16)+X(17)+X(18))/114.48-0.05)^2+((X(19)+X(20)+X(21)+X(22)+X(23)+X(24)+X(25)+X(26)+X(27))/503.73-0.05)^2+((X(28)+X(29)+X(30)+X(31)+X(32)+X(33)+X(34)+X(35)+X(36))/3202.68-0.05)^2+((X(37)+X(38)+X(39)+X(40)+X(41)+X(42)+X(43)+X(44)+X(45))/32.7-0.05)^2+((X(46)+X(47)+X(48)+X(49)+X(50)+X(51)+X(52)+X(53)+X(54))/78.5-0.05)^2+((X(55)+X(56)+X(57)+X(58)+X(59)+X(60)+X(61)+X(62)+X(63))/39.35-0.05)^2+((X(64)+X(65)+X(66)+X(67)+X(68)+X(69)+X(70)+X(71)+X(72))/189.72-0.05)^2+((X(73)+X(74)+X(75)+X(76)+X(77)+X(78)+X(79)+X(80)+X(81))/657.47-0.05)^2+((X(82)+X(83)+X(84)+X(85)+X(86)+X(87)+X(88)+X(89)+X(90))/39.3-0.05)^2+((X(91)+X(92)+X(93)+X(94)+X(95)+X(96)+X(97)+X(98)+X(99))/39.2-0.05)^2+((X(100)+X(101)+X(102)+X(103)+X(104)+X(105)+X(106)+X(107)+X(108))/114.49-0.05)^2+((X(109)+X(110)+X(111)+X(112)+X(113)+X(114)+X(115)+X(116)+X(117))/39.2-0.05)^2+((X(118)+X(119)+X(120)+X(121)+X(122)+X(123)+X(124)+X(125)+X(126))/39.3-0.05)^2+((X(127)+X(128)+X(129)+X(130)+X(131)+X(132)+X(133)+X(134)+X(135))/2464.33-0.05)^2+((X(136)+X(137)+X(138)+X(139)+X(140)+X(141)+X(142)+X(143)+X(144))/157-0.05)^2+((X(145)+X(146)+X(147)+X(148)+X(149)+X(150)+X(151)+X(152)+X(153))/39.3-0.05)^2+((X(154)+X(155)+X(156)+X(157)+X(158)+X(159)+X(160)+X(161)+X(162))/303.27-0.05)^2+((X(163)+X(164)+X(165)+X(166)+X(167)+X(168)+X(169)+X(170)+X(171))/484.1-0.05)^2+((X(172)+X(173)+X(174)+X(175)+X(176)+X(177)+X(178)+X(179)+X(180))/75.2-0.05)^2 %主程序 %---初始化 clear; X0=zeros(1,180); %---控制x的系数矩阵 A=zeros(180); for i=1:20; A(i,i*9-8:9*i)=1; end A; A(1,6:8)=0; A(2,15:17)=0; A(3,24:26)=0; A(4,33:34)=0; A(5,42:44)=0; A(6,52:53)=0; A(7,60:62)=0; A(8,69)=0; A(8,71)=0; A(9,78:80)=0; A(10,87:89)=0; A(11,97:98)=0; A(12,106:107)=0; A(13,114:116)=0; A(14,123:125)=0; A(15,133:134)=0; A(16,142:143)=0; A(17,152)=0; A(18,159:161)=0; A(19,168)=0; A(19,170)=0; A(20,177)=0; A(20,179)=0; %---控制 X>0的矩阵 for i=1:5; A(20+i,i)=-1; end for i=1:6; A(25+i,i+8)=-1; end for i=1:6; A(31+i,17+i)=-1; end for i=1:6; A(37+i,26+i)=-1; end for i=1:7; A(43+i,34+i)=-1; end for i=1:7; A(50+i,44+i)=-1; end for i=1:6; A(57+i,53+i)=-1; end for i=1:6; A(63+i,62+i)=-1; end A(70,70)=-1; for i=1:6; A(70+i,71+i)=-1; end for i=1:6; A(76+i,80+i)=-1; end for i=1:7; A(82+i,89+i)=-1; end for i=1:7; A(89+i,98+i)=-1; end for i=1:6; A(96+i,107+i)=-1; end for i=1:6; A(i+102,116+i)=-1; end for i=1:7; A(108+i,125+i)=-1; end for i=1:7; A(115+i,134+i)=-1; end for i=1:8; A(122+i,143+i)=-1; end for i=1:6; A(130+i,152+i)=-1; end for i=1:6; A(136+i,161+i)=-1; end A(143,169)=-1; for i=1:6; A(i+143,170+i)=-1; end A(150,178)=-1; A(151,180)=-1; %不等式约束 b=zeros(1,180)'; b(1:20)=[8.6528 2.2992 2.9092 61.8772 0.458 -1.49 -0.378 0.2688 1.6608 0.322 -1.412 0.3796 -0.282 0.422 -9.2468 -0.43 -0.268 5.1308 -12.586 0.058]; %修改数据0124最新,确定无误 b(21:151)=[1.1 3.5 2.4 0 0 0 0.33 0.55 0.64 0 1 0 1.43 1.95 1.56 0 11 0 9.13 27 22.05 0 5.25 2.8 0 0.11 0.2 0.64 0 0.5 0 0.22 2.4 0.64 0 1.6 0.62 0 0.11 0.8 0.64 0 0.8 0.2 0.55 4.2 1.2 0 0 0.47 0 1.35 5.55 4.23 0 13.6 0 0.2 0.8 0.64 0 0 0.1 0.11 1 0.64 0.1 0.7 0.65 0 0.33 1.8 0.72 0 0.9 0.62 0.1 0.11 0.6 0.64 0 0.6 0.1 0.11 0.8 0.64 0 0 0 7.04 24.8 16.86 0 50.8 8.32 0.7 0.44 1.5 0.91 0 3.2 0.66 0 0.11 0.8 0.65 0 0.8 0.63 0.12 0.1 0.88 4.25 1.87 0 0 0 1.43 11.8 3.12 0 0 1.56 0.6 0.3 0.52 0.7 0 1.6 0.25 0]'; % Aeq等式约束 B=eye(9,9); Aeq=[B B B B B B B B B B B B B B B B B B B B]; Aeq(6,6) =0; Aeq(6,15) =0; Aeq(6,24) =0; Aeq(6,33) =0; Aeq(6,42) =0; Aeq(6,60) =0; Aeq(6,69) =0; Aeq(6,78) =0; Aeq(6,87) =0; Aeq(6,114) =0; Aeq(6,123) =0; Aeq(6,159) =0; Aeq(6,168) =0; Aeq(6,177) =0; Aeq(7,7) =0; Aeq(7,16) =0; Aeq(7,25) =0; Aeq(7,34) =0; Aeq(7,43) =0; Aeq(7,52) =0; Aeq(7,61) =0; Aeq(7,79) =0; Aeq(7,88) =0; Aeq(7,97) =0; Aeq(7,106) =0; Aeq(7,115) =0; Aeq(7,124) =0; Aeq(7,133) =0; Aeq(7,142) =0; Aeq(7,160) =0; Aeq(8,8) =0; Aeq(8,17) =0; Aeq(8,26) =0; Aeq(8,44) =0; Aeq(8,53) =0; Aeq(8,62) =0; Aeq(8,71) =0; Aeq(8,80) =0; Aeq(8,89) =0; Aeq(8,98) =0; Aeq(8,107) =0; Aeq(8,116) =0; Aeq(8,125) =0; Aeq(8,134) =0; Aeq(8,143) =0; Aeq(8,152) =0; Aeq(8,161) =0; Aeq(8,170) =0; Aeq(8,179) =0; beq=[-0.952937359 -11.454 -13.87916445 4.138077294 68.62181342 -4.293981906 0.674824532 -2.38 1.27]; % 上界 lb=zeros(180,1); for m=1:20; lb(9*m-8:9*m,1)=[0 0 0 0 0 0 0 0 0]'; end % 下界 ub=zeros(180,1); for k=1:20; ub(9*k-8:9*k-1,1)=[0.006 0.02 0.009 0.004 0.032 0.0040 0.03 0.0009]'; ub(9*k,1)=0.01022; end D=zeros(180,1); D(1:9,1)=391.3; D(10:18,1)=114.48; D(19:27,1)=503.73; D(28:36,1)=3202.68; %D(35,1)=3202.68; D(37:45,1)=32.7; D(46:54,1)=78.5; D(55:63,1)=39.3; D(64:72,1)=189.72; D(73:81,1)=657.47; D(82:90,1)=39.3; D(91:99,1)=39.2; D(100:108,1)=114.49; D(109:117,1)=39.2; D(118:126,1)=39.3; D(127:135,1)=2464.33; D(136:144,1)=157; D(145:153,1)=39.3; D(154:162,1)=303.27; D(163:171,1)=484.1; D(172:180,1)=75.2; % 初始消耗矩阵 G=[1.1 3.5 2.4 0 0 0 0 0 0 0.33 0.55 0.64 0 1 0 0 0 0 1.43 1.95 1.56 0 11 0 0 0 0 9.13 27 22.05 0 5.25 0 0 2.8 0 0.11 0.2 0.64 0 0.5 0 0 0 0 0.22 2.4 0.64 0 1.6 0.62 0 0 0 0.11 0.8 0.64 0 0.8 0 0 0 0.2 0.55 4.2 1.2 0 0 0 0.47 0 0 1.35 5.55 4.23 0 13.6 0 0 0 0 0.2 0.8 0.64 0 0 0 0 0 0.1 0.11 1 0.64 0.1 0.7 0.65 0 0 0 0.33 1.8 0.72 0 0.9 0.62 0 0 0.1 0.11 0.6 0.64 0 0.6 0 0 0 0.1 0.11 0.8 0.64 0 0 0 0 0 0 7.04 24.8 16.86 0 50.8 8.32 0 0 0.7 0.44 1.5 0.91 0 3.2 0.66 0 0 0 0.11 0.8 0.65 0 0.8 0.63 0.12 0 0.1 0.88 4.25 1.87 0 0 0 0 0 0 1.43 11.8 3.12 0 0 0 1.56 0 0.6 0.3 0.52 0.7 0 1.6 0 0.25 0 0]'; % x上下界 lb=lb.*D-G; ub=ub.*D-G; options=optimset('largescale','off','GradObj','on') %options=optimset('largescale','off','maxfunevals',5e+4,'MaxIter',5000,'GradObj','on'); [X,fval,exitflag,output,lambda,grad,hessian]=fmincon('f4',X0,A,b,Aeq,beq,lb,ub); %[x,resnorm] = lsqlin(C,d,A,b,Aeq,beq,X0); % x=x'; % G=G'; |
![]() |
![]() |
![]() |
#2 |
高级会员
注册日期: 2008-01-02
帖子: 247
声望力: 22 ![]() |
![]()
可以看出楼主是matlab高手,正在看你的程序。但优化并非matlab强项,相反,这应该是matlab所不擅长的。楼主为什么用它来求解优化问题呢?
|
![]() |
![]() |
![]() |
#3 |
初级会员
注册日期: 2008-05-07
年龄: 36
帖子: 2
声望力: 0 ![]() |
![]()
我也遇到这样的问题,还没解决呢、
|
![]() |
![]() |
![]() |
#4 |
初级会员
注册日期: 2008-09-18
年龄: 42
帖子: 19
声望力: 17 ![]() |
![]()
请教下,我也使用fmincon函数,但是等式约束要50多个方程,不知道怎么写这个约束,能否帮帮小弟!
|
![]() |
![]() |