gpt4 book ai didi

Python linprog最小化--单纯形法

转载 作者:太空宇宙 更新时间:2023-11-03 12:55:01 28 4
gpt4 key购买 nike

我正在使用 scipy.optimize.linprog 库来计算使用单纯形法的最小化。我正在我的教科书中解决这个问题,我希望有人能给我指出正确的方向,因为我没有得到我期望的输出。问题是:

Minimize          w = 10*y1 + 15*y2 + 25*y3
Subject to: y1 + y2 + y3 >= 1000
y1 - 2*y2 >= 0
y3 >= 340
with y1 >= 0, y2 >= 0

我为此写的代码是:

import numpy as np
import pandas as pd
from scipy.optimize import linprog
A = np.array([
[1, 1, 1],
[1,-2, 0],
[0, 0, 1]])
b = np.array([1000,0,340])
c = np.array([-10,-15,-25])
res = linprog(c, A_ub=A, b_ub=b,
bounds=(0, None))
print('Optimal value:', res.fun, '\nX:', res.x)

给出输出:

Optimal value: -18400.0
X: [ 0. 660. 340.]

我希望它是:

Optimal value: -15100.0
X: [ 660. 0. 340.]

我似乎无法找到与此功能的一致性,但也许这就是我使用它的方式。

最佳答案

你设置的输入有点错误;见the manual .具体来说,您有许多符号错误。

  1. 您的矢量 c有错误的标志; linprog最小化 c x所以c应该只是 w = c x 中的系数

  2. 您的矢量 b和矩阵 A有错误的标志。他们的标志应该倒转以从您的约束形式切换f(x) >= constlinprog 所需的形式方法,这是一个小于或等于,即 -f(x) <= - const

  3. 您缺少最后两个约束。

  4. 您建议的最小值是 < 0,这显然是不可能的,因为 w = 10*x1 + 15*x2 + 25*x3对你的约束总是积极的 x1,x2,x3>=0 .

正确的代码是:

import numpy as np
from scipy.optimize import linprog

A = np.array([[-1, -1, -1], [-1,2, 0], [0, 0, -1], [-1, 0, 0], [0, -1, 0]])
b = np.array([-1000, 0, -340, 0, 0])
c = np.array([10,15,25])

res = linprog(c, A_ub=A, b_ub=b,bounds=(0, None))

print('Optimal value:', res.fun, '\nX:', res.x)
# python2
# ('Optimal value:', 15100.0, '\nX:', array([ 660., 0., 340.]))
# python3
# Optimal value: 15099.999961403426
# X: [6.59999996e+02 1.00009440e-07 3.40000000e+02]

关于Python linprog最小化--单纯形法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45873783/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com