整数规划Matlab实现

\max z=40x_1+90x_2

9x_1+7x_2\leq 56

7x_2+20x_2\leq 70

x_1,x_2\geq 0   且为整数

        现实中很多问题都需要求整,下面我们用Matlab来解决这个问题,我们这里使用分支定界法。

先用线性规划解出大致范围。

%初步处理
clear all
clc
c=[40 90];%填目标函数系数
a=[9,7;7,20]; %就是要一致大于或小于,然后取条件函数系数
b=[56;70];%条件函数已知数部分
aeq=[];%若存在一个等式限制,则填写等式系数
beq=[];%等式已知数部分
lb=[0;0];%没有下限
ub=[inf;inf];%没有上限
[x,y]=linprog(-c,a,b,aeq,beq,lb,ub);
x
best=c*x%计算最优值

 这是我们利用线性规划解出的。

分枝定界法

第一步

根据上一步结果,可以暂定z上限为 356。同样也可以看出当x_1,x_2分别为0时z最小,最小为0。故最大值z范围可定位0\leq z\leq 356

第二步

先对x_1分枝

x_1\leqslant [4.8092]= 4,x_1\geq [4.8092]=5

4和5之间就没有整数,该方法叫做分枝

约束条件转变

0\leq x_1<4    x_2>0

%整数规划
clear all
clc
c=[40 90];%填目标函数系数
a=[9,7;7,20]; %就是要一致大于或小于,然后取条件函数系数
b=[56;70];%条件函数已知数部分
aeq=[];%若存在一个等式限制,则填写等式系数,没有等式约束,因此aeq,beq都为空
beq=[];%等式已知数部分
lb=[0;0];%下限依然都为0
ub=[4;inf];%x1上限为4,x2没有上限
[x,y]=linprog(-c,a,b,aeq,beq,lb,ub);
x    %获取对应x1,x2
best=c*x%计算最优值

运行结果:

 我们得出x_1=4,x_2=2.1,z_1=349

换分割的x范围,

x_1\geq 5  x_2>0

%整数规划
clear all
clc
c=[40 90];%填目标函数系数
a=[9,7;7,20]; %就是要一致大于或小于,然后取条件函数系数
b=[56;70];%条件函数已知数部分
aeq=[];%若存在一个等式限制,则填写等式系数,没有等式约束,因此aeq,beq都为空
beq=[];%等式已知数部分
lb=[5;0];
ub=[inf;inf];
[x,y]=linprog(-c,a,b,aeq,beq,lb,ub);
x    %获取对应x1,x2
best=c*x%计算最优值

运行结果:

 我们得出x_1=5,x_2=1.5714,z=341.4286

现在我们可以把最优解再定界,确定范围为:0\leq z\leq 349

第三步

x_2处理,这里不细写。

0\leq x_1\leq 4  0\leq x_2\leq 2

 0\leq x_1\leq 4   x_2 \geq 3

 

 因此我们可以再次确定z范围为340\leq z\leq 341

第四步

对第二种情况分析

x_1\geq 5  0\leq x_2\leq 2

 

 x_1\geq 5  x_2 \geq 3

 

 可以看到,没有解

综合上面两个分枝,第一个仍有小数,不可取;第二个不可行解,也不可取。这样的操作称为剪枝。

 结论

第二种情况,两分枝都不可取,第一种只有一个枝可取,即最优解为:

x_1=4,x_2=2,z=340

总结

开始,将要求解的整数规划问题称为问题A,将与它相应的线性规划问题称为问题B。求解情况如下:
1. B没有可行解,这时A也没有可行解,则停止
2. B 有最优解,并符合问题A的整数条件,B 的最优解即为A的最优解,则停止。
3. B有最优解,但不符合问题A的整数条件,记它的目标函数值为z,通过我上述所说的四个步骤使用分枝定界法进行分枝,剪枝,最后得出结果。

这里留一道题,你们可以练练手:

  • 14
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
粒子群整数规划(Particle Swarm Optimization, PSO)是一种优化算法,可以用于解决整数规划问题。Matlab是一种常用的科学计算软件,它提供了丰富的工具和函数,使得编写粒子群整数规划算法变得更加方便。 粒子群整数规划算法的思想源于模拟鸟群觅食的行为。在算法中,一群粒子被随机初始化,并在搜索空间中迭代寻找最优解。每个粒子都有自己的位置和速度,并通过不断更新来逼近最优解。在整数规划问题中,每个粒子的位置代表一个可行解,而速度则代表搜索的方向和步长。 在Matlab中,可以首先定义整数规划问题的目标函数和约束条件。然后,通过编写适应度函数来评估每个粒子的位置的适应度,即目标函数值。接下来,需要定义粒子的初始位置、速度、加速度以及其他相关参数,以确定PSO算法的运行。在每次迭代中,根据粒子的当前位置和速度,更新粒子的位置和速度,并计算新的适应度。通过迭代运行算法,最终可以得到逼近最优解的整数规划解。 在实现粒子群整数规划算法时,Matlab的优势在于其丰富的矩阵计算和优化函数。可以使用矩阵运算来简化数学运算,提高计算效率。此外,Matlab还提供了许多优化函数,如fmincon函数,可以用于求解约束优化问题。可以将PSO算法与这些优化函数相结合,以获得更高效的整数规划求解方法。 总之,利用Matlab可以通过编写粒子群整数规划算法来求解整数规划问题。通过合理地定义问题的目标函数、约束条件和优化参数,结合Matlab提供的优化函数和矩阵计算功能,可以得到逼近最优解的整数规划解。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星辰之光.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值