min{max{qixi}}这种目标函数,要如何用linprog表示
时间: 2024-04-14 20:27:53 浏览: 119
对于目标函数min{max{qixi}},可以通过引入额外的变量来进行转换,以便使用`linprog`函数进行线性规划求解。
假设最终的目标函数为`min{max{qixi}}`,我们可以引入一个新的变量`M`,然后将目标函数转化为`min M`。同时,我们需要添加一些约束条件来确保`M`大于等于`qixi`的每个组合。
以下是修改后的代码示例:
```python
from scipy.optimize import linprog
import matplotlib.pyplot as plt
a = 0
c_values = []
Q_values = []
while (1.1 - a) > 1:
c = [0, 0, 0, 0, -1] # 目标函数改为 [0, 0, 0, 0, -1]
Aeq = [[1, 1.01, 1.02, 1.045, 1.065]]
beq = [1]
A = [[-1, 0, 0, 0, 0], [0, -1, 0, 0, 0], [0, 0, -1, 0, 0], [0, 0, 0, -1, 0], [0, 0, 0, 0, -1]] # 添加 M 大于等于 qixi 的约束条件
b = [-a, -a, -a, -a, 0]
vlb = [0, 0, 0, 0, 0]
vub = []
res = linprog(c=c, A_ub=A, b_ub=b, A_eq=Aeq, b_eq=beq, bounds=list(zip(vlb, vub)))
x = res.x[:5] # 去除最后一个元素,即 M 的取值
a += 0.001
print(a)
print(x)
Q = max([q * x[i] for i, q in enumerate(c)]) # 计算 max{qixi}
c_values.append(a)
Q_values.append(Q)
plt.plot(c_values, Q_values, '.')
plt.xlabel('a')
plt.ylabel('Q')
plt.axis([0, 1.1, 0, 0.5])
plt.show()
```
请尝试运行修改后的代码,看看是否符合您的预期。
阅读全文