with を使用PuLP
して、Python で LP モデルを操作していCBC
ます。モデルには多くの制約があり、もちろんそれらの多くは冗長です。その例を示します。
#import libraries
from pulp import LpVariable, LpProblem, LpMaximize, lpSum, LpConstraint, LpStatus, value
prob = LpProblem("test_model", LpMaximize)
set_pt=[i for i in range(100)] #set of var
var = LpVariable.dicts("var",set_pt,lowBound=0,cat='Continuous')
# The objective function is added to 'prob' first
prob += lpSum([var[i] for i in set_pt]), "f(v)"
#constraits
for i in set_pt:
prob += LpConstraint(var[i] <= 300000), "max margin "+str(i)
prob += LpConstraint(var[i] <= 30000000000), "ma2 margin "+str(i)
#solve
prob.writeLP("price_mod2.lp")
print 'solver begin'
prob.solve()
# The status of the solution is printed to the screen
print "Status:", LpStatus[prob.status]
この結果は次のとおりです。
solver begin
Status: Infeasible
もちろん、この例では両方の制約が明らかに冗長であり、私が解決する問題では、制約の魔女が冗長であることを確認するのが少し難しくなります。
問題がソルバー ( CBC
) にあるのかどうかわからないので、代わりに多分を使用CPLEX
して冗長な制約の問題を解決するか、問題がPuLP
あり、別のライブラリを使用する必要があります。または、問題をモデル化して冗長性を証明する必要があるかもしれません。
ガイダンスはありますか?ありがとう!
編集:私はオープンソルバー(Excelで)を使用して試してみましたCBC
が、PuLP
うまくいきました。PuLP