高级算法设计与分析 学习笔记13 线性规划

注意是线性规划不是动态规划哦

好家伙,这不是凸优化吗?

画图当然好解决,但是高维怎么办?

凸优化标准形式:

先改成统一最大化(凸优化那边怎么是统一最小化?)

原来的x2正负无所谓,但我希望每个x都是有限制的,所以把它改成x2'-x2''

等式变成两个不等式。两个都要满足,相当于是等式(奇怪的仪式感)

改造之后就成了这样,全都是不等式约束,每个变量都有约束,目标函数要求最大化。

标准凸优化我有“四不要”:

除此之外还有松弛模式:

1. 将问题转换为标准形式和松弛形式

假设我们要解决一个最大化问题,如下:

  • 目标函数:Z=3x1+x2+2x3Z = 3x_1 + x_2 + 2x_3Z=3x1​+x2​+2x3​
  • 约束条件: {x1+x2+3x3≤302x1+2x2+5x3≤244x1+x2+2x3≤36x1,x2,x3≥0\begin{cases} x_1 + x_2 + 3x_3 \leq 30 \\ 2x_1 + 2x_2 + 5x_3 \leq 24 \\ 4x_1 + x_2 + 2x_3 \leq 36 \\ x_1, x_2, x_3 \geq 0 \end{cases}⎩⎨⎧​x1​+x2​+3x3​≤302x1​+2x2​+5x3​≤244x1​+x2​+2x3​≤36x1​,x2​,x3​≥0​

为了使用Simplex方法,我们首先将不等式转换为等式。为此,我们引入松弛变量 x4,x5,x6x_4, x_5, x_6x4​,x5​,x6​,使得每个不等式变成等式:

{x4=30−x1−x2−3x3x5=24−2x1−2x2−5x3x6=36−4x1−x2−2x3\begin{cases} x_4 = 30 - x_1 - x_2 - 3x_3 \\ x_5 = 24 - 2x_1 - 2x_2 - 5x_3 \\ x_6 = 36 - 4x_1 - x_2 - 2x_3 \end{cases}⎩⎨⎧​x4​=30−x1​−x2​−3x3​x5​=24−2x1​−2x2​−5x3​x6​=36−4x1​−x2​−2x3​​

此时,问题的松弛形式为:

  • 最大化:Z=3x1+x2+2x3Z = 3x_1 + x_2 + 2x_3Z=3x1​+x2​+2x3​
  • 约束条件:x1,x2,x3,x4,x5,x6≥0x_1, x_2, x_3, x_4, x_5, x_6 \geq 0x1​,x2​,x3​,x4​,x5​,x6​≥0

2. 寻找基本可行解

在初始解中,设 x1=x2=x3=0x_1 = x_2 = x_3 = 0x1​=x2​=x3​=0,则我们得到基本可行解:

(x1,x2,x3,x4,x5,x6)=(0,0,0,30,24,36)(x_1, x_2, x_3, x_4, x_5, x_6) = (0, 0, 0, 30, 24, 36)(x1​,x2​,x3​,x4​,x5​,x6​)=(0,0,0,30,24,36)

此时,目标函数值为 Z=0Z = 0Z=0。

3. 选择进入和退出基的变量

Simplex方法的核心在于“旋转”操作,即在非基变量中选择一个能提高目标函数值的变量进入基,同时让一个当前基变量退出基。通过这种方式,我们可以从一个顶点移动到另一个更优的顶点。

例如,我们可以选择 x1x_1x1​ 进入基,并选择 x6x_6x6​ 退出基。通过将 x6x_6x6​ 的值减少到0,我们可以得到新的基本解:

(x1,x2,x3,x4,x5,x6)=(9,0,0,21,6,0)(x_1, x_2, x_3, x_4, x_5, x_6) = (9, 0, 0, 21, 6, 0)(x1​,x2​,x3​,x4​,x5​,x6​)=(9,0,0,21,6,0)

此时,目标函数值更新为 Z=27Z = 27Z=27。

4. 重复迭代直至达到最优解

继续上述步骤,通过选择合适的进入和退出变量,不断更新解和目标函数值,最终可以达到最优解。当目标函数无法进一步提升时,当前解即为最优解。

根据PPT中的示例,最终可以得到最优解为:

(x1,x2,x3,x4,x5,x6)=(8,4,0,18,0,0)(x_1, x_2, x_3, x_4, x_5, x_6) = (8, 4, 0, 18, 0, 0)(x1​,x2​,x3​,x4​,x5​,x6​)=(8,4,0,18,0,0)

对应的最优目标函数值为 Z=28。

这种方法适用于所有的线性规划问题,尤其是在高维情况下,Simplex方法通过逐步调整变量,能够有效地在顶点之间移动,最终找到最优解。

注意:因为改变x1可以最大化增大目标,所以先改变x1。最大改变多少?注意第三条等式约束最紧,可以见x1最多加到8(多了就不平衡了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值