注意是线性规划不是动态规划哦
好家伙,这不是凸优化吗?
画图当然好解决,但是高维怎么办?
凸优化标准形式:
先改成统一最大化(凸优化那边怎么是统一最小化?)
原来的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−3x3x5=24−2x1−2x2−5x3x6=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(多了就不平衡了)