2.2.8. デバッグ出力関数

数理計画モデルが複雑になるほど,些細な記述ミスでも発見が困難になっていきます. そのようなミスを修正するための支援関数としても print() 関数や Printf() 関数は有効です.

以下のように,print(problem) を最適化計算 problem.solve() の直前に挿入してみます.

print(problem)
problem.solve()

上記の位置に記述すれば,最適化計算を行うモデルの内容が出力できます. これを実行すると,print() に対応した出力が以下のように得られます.

Problem(name='油田問題7', type=min):
[constraints]
製品ノルマ:
6*油田の運転日数[0]+油田の運転日数[1]>=12
4*油田の運転日数[0]+6*油田の運転日数[1]>=24

[objective]
全運転コスト:
180*油田の運転日数[0]+160*油田の運転日数[1]

3〜5 行目は次のノルマ制約式に対応しています.:

problem += prod >= norma[j], '製品ノルマ'

7 行目以降は次のコスト定義式に対応しています.:

problem += Sum(costX[i]*x[i], i), '全運転コスト'

以下のように特定の制約式や目的関数のみを表示することもできます.:

print(problem['製品ノルマ'])
print(problem.objective)

このように,print() を使用することによって, 定数値,添字等を実際の値に置き換えた後の目的関数・制約式を確認することができます. この機能を利用すれば,意図しない記述ミスを簡単に発見することができ,効率の良いモデル記述が可能になります.