对于线性规划而言,有着成熟且有效的方法,而对于非线性整数规划而言,没有通解,尽管限制变量为整数而增加了难度,然而整数解为有限个,于是可以用枚举法求解方案。
当然在一个自变量维度很大和取值范围很宽的情况下,企图用穷举法计算最优值是不现实的,但是根据概率理论可知,完全可以得出一份满意解。
下面是matlab实现随机取样计算:
我们这里取非线性规划函数,定义目标函数f和约束向量g
function [f,g]=mengte(x);
f=x(1)^2+x(2)^2+3*x(3)^2+4*x(4)^2+2*x(5)^2-8*x(1)-2*x(2)-3*x(3)-x(4)-2*x(5);
g(1)=sum(x)-400;
g(2)=x(1)+2*x(2)+2*x(3)+x(4)+x(5)-800;
g(3)=2*x(1)+x(2)+6*x(3)-200;
g(4)=x(3)+x(4)+5*x(5)-200;
主函数如下:
rand('state',sum(clock));%采用时间作为随机数的初始状态,保证不会出现相同的随机数
p0=0;
tic;%开始计时
for i=1:10^5
x=99*rand(5,1);
x1=floor(x);%x向下取整
x2=ceil(x);%x向下取整
[f,g]=mengte(x1);
if sum(g<=0)==4
if p0<=f
x0=x2;po=f;
end
end
[f,g]=mengte(x2);
if sum(g<=0)==4
if p0<=f
x0=x2;po=f;
end
end
end
x0
po
toc%停止计时
运行结果为
>> main
x0 =
2
62
9
91
13
po =
37269
时间已过 0.947124 秒。
由于是随机取样,所以每次运行的结果的可能不一样,但是误差不会太大,但对于比较标准的整数规划模型,建议考虑用Lingo求解。