例已知非线性整数规划为
max z=??
1
2
+ ??
2
2
+ 3??
3
2
+ 4??
4
2
+ 2??
5
2
- 8??
1
- 2??
2
- 3??
3
- ??
4
- 2??
5
s.t.
0 ? ??
??
? 99, ??= 1,2, ? 5
??
1
+ ??
2
+ ??
3
+ ??
4
+ ??
5
? 400
??
1
+ 2??
2
+ 2??
3
+ ??
4
+ 6??
5
? 800
2??
1
+ ??
2
+ 6??
3
? 200
??
3
+ ??
4
+ 5??
5
? 200
(1)编写 M 文件 mengte.m, 定义目标函数 f 和约束向量函数 g,程序如下:
function[f,g]=mengte(x);
f=x(1)^2+x(2)^2+3*(3)^2+4*x(4)^2+2*x(5)^2-8*x(1)-2*x(2)-3*x(3)-x(4)-2x(5);
g(1)=sum(x)-400;
g(2)=x(1)+2*x(2)+2x(3)+x(4)+6*x(5)-800
g(3)=2x(1)+x(2)+6x(3)-200;
g(4)=x(3)+x(4)+5*x(5)-200;
(2)编写如下程序求问题的解:
rand('state',sum(clock));
p0=0;
tic
for i=1:10^5
x=99*rand(5,1);
x1=floor(x);x2=ceil(x);
[f,g]=mengte(x1);
if sum(g<=0)==4
if p0<=f
x0=x1;p0=f;
end
end
[f,g]=mengte(x2);
if sum(g<=0)==4
if p0<=f
x0=x2;p0=f;
end
end
end
x0,p0
toc