线性规划与整数线性规划

最近在学数学建模,把代码和遇到的问题记录一下

线性规划

基本类型

基本直接套函数

[x,fval]=linprog(f,A,b,Aeq,beq,lb,ub)

x返回决策向量取值,fval返回最优解,f目标函数,A,b线性不等式约束,Aeq,beq线性等式约束,lb,ub界值向量

一般都是矩阵形式

一个easy题,把代码复习一下

max z=2x1+3x2-5x3,
s.t.
x1+x2+x3=7,
2x1-5x2+x3>=10,
x1+3x2+x3<=12,
x1,x2,x3>=0

程序如下

f=[-2;-3;-5];
a=[-2 5 -1;1 3 1];
b=[-10;12];
aeq=ones(1,3);
beq=7;
[x,y]=linprog(f,a,b,aeq,beq,zeros(3,1));

特殊类型

即带绝对值的,也挺简单的,改一下模型就行,用lingo可以直接求

一类问题

主要就是投资的收益和风险,具体问题具体分析,大部分可以简化模型,比如固定一个值,优化另一个,再用循环改变固定值

整数规划

0-1型整数规划

相互排斥

改写约束条件,比如

x=0或500<x<800

改写为 500y<x<800y,y=0或1

思路比较灵活,有时候需要引入M(充分大)

指派问题

直接用intlinprog,比linprog多了个参数intcon,还是比较复杂的,需要把多维变量转变成一维向量

clc,clear
c=[3 8 2 10 3;
   8 7 2 9 7;
   6 4 2 7 5;
   8 4 2 3 5;
   9 10 6 9 10;]; //系数矩阵
c=reshape(c,[25 1]);
a=zeros(10,25);
intcon=1:25;
for i=1:5
    a(i,(i-1)*5+1:5*i)=1;
    a(5+i,i:5:25)=1;
end
b=ones(10,1);
lb=zeros(25,1);
ub=ones(25,1);
x=intlinprog(c,intcon,[],[],a,b,lb,ub);
x=reshape(x,[5 5])

蒙特卡洛法

很经典的随机模拟方法,直接上代码

mengte.m函数文件
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=[sum(x)-400
    x(1)+2*x(2)+2*x(3)+x(4)+6*x(5)-800
    2*x(1)+x(2)+6*x(3)-200
    x(3)+x(4)+5*x(5)-200];

测试代码

rng(sum(clock));
p0=0;
tic
for i=1:10^6
    x=randi([0,99],1,5);
    [f,g]=mengte(x);
    if all(g<=0)
        if p0<f
            x0=x;p0=f;
        end
    end
end
x0,p0
toc

暂时写这么多,碰到问题再补充

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值