基于matlab的随机取样计算法

对于线性规划而言,有着成熟且有效的方法,而对于非线性整数规划而言,没有通解,尽管限制变量为整数而增加了难度,然而整数解为有限个,于是可以用枚举法求解方案。
当然在一个自变量维度很大和取值范围很宽的情况下,企图用穷举法计算最优值是不现实的,但是根据概率理论可知完全可以得出一份满意解

下面是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求解。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值