0
シンプレックス法を使用して最小化を計算するには、scipy.optimize.linprogライブラリを使用しています。私は教科書でこの問題に取り組んでいます。私が期待している出力が得られないので、誰かが正しい方向に向けることを期待しています。問題は次のとおりです。Python 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
私はこのために書いたコードです:
Optimal value: -15100.0
X: [ 660. 0. 340.]
:私はそれがあることを期待
Optimal value: -18400.0
X: [ 0. 660. 340.]
:
出力を与える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)
私はこの機能と一貫性を見つけることができませんしかし、おそらくそれは私がそれを使用している方法です。
素晴らしい説明だこと - あなたに感謝!私はドキュメントにもっと多くの例があり、このように少し良く説明されたことを望みます。私はもともと、正しい符号を持つベクトルcを持っていましたが、出力が得られなかったので、それらを切り替えました。ベクトルbと行列Aについては、記号を逆転させることを知っていなければなりません。より多くの例がすべて同じかそれ以下であることを認識していなければなりません。私は完全に最後の2つの制約を逃した。 –