型 0 −1 の整数計画法は、変数が値 0 または 1 のみを取る整数計画法の特殊なケースです。この時呼ばれた
0 から 1 の変数、またはバイナリ変数。値 0 または 1 のみを取る条件には、次の制約が適用されます。
整数の置換は、一般的な整数計画法の制約形式と一致しています。実際の問題では、0 −1 個の変数を導入すると、さまざまな状況で個別に議論する必要がある線形計画問題を 1 つの問題に統合できます。最初に、0 −1 個の変数を導入する実際の問題を紹介します。
1.数学的モデリングプロセス
投資サイトの選択 - 相互に排他的なプログラム
例 4 ある企業が、市の東、西、および南地区に営業所を開設しようとしています。提案では、 7 つのポジション (ポイント)から選択できます。規制:
イーストサイドで。 3 つのポイントのうち、多くても 2 つを 選択してください。
ウエストエンドで。2 つの点のうち少なくとも 1 つ が選択されます。
South Zone では 、2 つのポイントのうち少なくとも 1 つが選択されます。
ポイントを選択した場合、設備投資はRMBと見積もられ、年間利益はRMBが、総投資額はRMBを超えることはできません。聞く
年間利益を最大化するには、どのポイントを選択する必要がありますか?
問題を解くときは、まず 0 −1 変数を導入して 、
したがって、問題は次のように記述できます。
2. 相互に排他的な制約
相互に排他的な制約が 2 つあります。
0 −1 変数 y を導入すると、上記の制約は次のように書き直すことができます。
ここで、M は十分に大きな数です。制限
として書き換えることができます
相互に排他的な制約が m 個ある場合:
制約の 1 つだけが機能すること、 0 −1 個の変数と十分に大きな定数、および次の一連の制約を導入します。
上記の要件を満たします。これは、(2) により 、m の 1 つだけが 0 の値を取ることができるためです。(1) に , を代入すると、制約のみが機能し、他の式は冗長になります。
3. 固定費の問題
固定費 (fixed cost) の問題は、一般的な線形計画法では記述できませんが、混合整数計画法に変更することで解決できます。以下の例を参照してください。
例 5 ある工場では、特定の製品を生産するためにいくつかの異なる生産方法を選択できます. 変動費は削減されます. 逆に, 選択した生産方法への投資が少ない場合, 各製品に割り当てられる変動費は将来的に増加する可能性があります. . そのため、総合的に検討する必要があります。3つの方法から選択できます。
- j番目の方法が採用された場合の出力を示します。
- j番目の方法を使用した場合の各製品の変動費を表します。
- j番目の方法を使用した場合の固定費を示します。
コストの特性を説明するために、他の制約は当面考慮されません。さまざまな生産方法を使用するための総コストは次のとおりです。
目的関数を構成するとき、それを 1 つの問題で一様に議論するために、0 −1 個の変数が導入されます。
したがって、目的関数
(3) この要件は、次の 3 つの線形制約として表すことができます。
ここで、 は十分に小さい正の数で、は十分に大きい正の数です。> 0 の場合は 1 でなければなりません。 = 0が0 の場合のみ意味があります。
栗を取る:
4.プログラミングの実装
Python で実装
import pulp
InvestLP = pulp.LpProblem("0 −1型整数规划问题", sense=pulp.LpMaximize) # 定义问题,求最大值
x1= pulp.LpVariable('x1', cat='Binary') # 定义 x1
x2= pulp.LpVariable('x2', cat='Binary') # 定义 x2
x3= pulp.LpVariable('x3', cat='Binary') # 定义 x3
InvestLP += (3*x1 - 2*x2 + 5*x3 ) # 设置目标函数 f(x)
InvestLP += (x1 + 2*x2 - x3 <= 2) # 不等式约束
InvestLP += (x1 + 4*x2 + x3 <= 4)
InvestLP += (x1 +x2 <= 3)
InvestLP += (4*x2 +x3 <= 6)
InvestLP.solve()
print(InvestLP.name) # 输出求解状态
print("求解状态:", pulp.LpStatus[InvestLP.status]) # 输出求解状态
for v in InvestLP.variables():
print(v.name, "=", v.varValue) # 输出每个变量的最优值
print("目标函数值 =", pulp.value(InvestLP.objective)) # 输出最优解的目标函数值
出力結果:
0 −1型整数规划问题
求解状态: Optimal
x1 = 1.0
x2 = 0.0
x3 = 1.0
目标函数值 = 8.0