sample.tutorial のソースコード

# -*- coding: utf-8 -*-

[ドキュメント]def oil1(**kwds): """油田問題(目的関数・変数・制約)""" from pysimple import Problem, Variable problem = Problem(name='油田問題1') # 油田X,Yの運転日数/週(変数) x = Variable(lb=0, ub=5, name='油田Xの運転日数') y = Variable(lb=0, ub=5, name='油田Yの運転日数') # 運転コスト(目的関数) problem += 180*x + 160*y, '全運転コスト' # 製品ノルマ problem += 6*x + y >= 12, '重油ノルマ/週' problem += 4*x + 6*y >= 24, 'ガスノルマ/週' # 各油田の日数制約 # problem += 0 <= x, '油田Xの週あたりの運転日数制約(下限)' # problem += x <= 5, '油田Xの週あたりの運転日数制約(上限)' # problem += 0 <= y, '油田Yの週あたりの運転日数制約(下限)' # problem += y <= 5, '油田Yの週あたりの運転日数制約(上限)' # 求解 print(problem) problem.solve(**kwds) # 結果出力 print(x.val) print(y.val) print(problem.objective.val)
[ドキュメント]def oil2(**kwds): """油田問題(定数)""" from pysimple import Problem, Variable, Parameter problem = Problem(name='油田問題2') # 油田X,Yの運転日数/週(変数) x = Variable(lb=0, ub=5, name='油田Xの運転日数') y = Variable(lb=0, ub=5, name='油田Yの運転日数') costX = Parameter(value=180, name='油田Xの運転コスト') costY = Parameter(value=160, name='油田Xの運転コスト') # costX = Parameter(value=100, name='油田Xの運転コスト') # costY = Parameter(value=170, name='油田Xの運転コスト') # 運転コスト(目的関数) problem += costX*x + costY*y, '全運転コスト' # 製品ノルマ problem += 6*x + y >= 12, '重油ノルマ/週' problem += 4*x + 6*y >= 24, 'ガスノルマ/週' # 求解 print(problem) problem.solve(**kwds) # 結果出力 print(x.val) print(y.val) print(problem.objective.val)
[ドキュメント]def oil3(**kwds): """油田問題(集合・添字)""" from pysimple import Problem, Element, Parameter, Variable problem = Problem(name='油田問題3') # 油田を表す添字 i = Element(value=[0, 1], name='油田') # # 油田集合 # OilField = Set(value=[0, 1], name='油田集合') # i = Element(set=OilField) # 製品を表す添字 j = Element(value=['重油', 'ガス'], name='製品') # # 製品集合 # Product = Set(value=['重油', 'ガス'], name='製品集合') # j = Element(set=Product) # 油田 i の運転コスト/日 costX = Parameter(index=i, value={0: 180, 1: 160}, name='油田運転コスト') # 製品 j のノルマ/週 norma = Parameter(index=j, value={'重油': 12, 'ガス': 24}, name='製品ノルマ') # 油田 i の運転日数(変数) x = Variable(lb=0, ub=5, index=i, name='油田の運転日数') print(costX) print(norma) # 運転コスト/週(目的関数) problem += costX[0]*x[0] + costX[1]*x[1], '全運転コスト' # 製品ノルマ problem += 6*x[0] + x[1] >= norma['重油'], '重油ノルマ/週' problem += 4*x[0] + 6*x[1] >= norma['ガス'], 'ガスノルマ/週' # 求解 print(problem) problem.solve(**kwds) # 結果出力 print(x.val) print(problem.objective.val)
[ドキュメント]def oil4(**kwds): """油田問題(集約・複数の添字)""" from pysimple import Problem, Element, Parameter, Variable, Sum problem = Problem(name='油田問題4') # 油田を表す添字 i = Element(value=[0, 1], name='油田') # 製品を表す添字 j = Element(value=['重油', 'ガス'], name='製品') # 油田 i の運転コスト/日 costX = Parameter(index=i, value={0: 180, 1: 160}, name='油田運転コスト') # 製品 j のノルマ/週 norma = Parameter(index=j, value={'重油': 12, 'ガス': 24}, name='製品ノルマ') # 油田 i の製品 j 生産量/日 prodXvalue = {(0,'重油'): 6, (0,'ガス'): 4, (1,'重油'): 1, (1,'ガス'): 6} prodX = Parameter(index=(i,j), value=prodXvalue, name='油田の生産量') # 油田 i の運転日数(変数) x = Variable(lb=0, ub=5, index=i, name='油田の運転日数') print(costX) print(norma) print(prodX) # 運転コスト/週(目的関数) problem += Sum(costX[i]*x[i], i), '全運転コスト' # 製品ノルマ problem += Sum(prodX[i,j]*x[i], i) >= norma[j], '製品ノルマ' # 求解 print(problem) problem.solve(**kwds) # 結果出力 print(x.val) print(problem.objective.val)
[ドキュメント]def oil5(**kwds): """油田問題(式)""" from pysimple import Problem, Element, Parameter, Variable, Sum problem = Problem(name='油田問題5') # 油田を表す添字 i = Element(value=[0, 1], name='油田') # 製品を表す添字 j = Element(value=['重油', 'ガス'], name='製品') # 油田 i の運転コスト/日 costX = Parameter(index=i, value={0: 180, 1: 160}, name='油田運転コスト') # 製品 j のノルマ/週 norma = Parameter(index=j, value={'重油': 12, 'ガス': 24}, name='製品ノルマ') # 油田 i の製品 j 生産量/日 prodXvalue = {(0,'重油'): 6, (0,'ガス'): 4, (1,'重油'): 1, (1,'ガス'): 6} prodX = Parameter(index=(i,j), value=prodXvalue, name='油田の生産量') # 油田 i の運転日数(変数) x = Variable(lb=0, ub=5, index=i, name='油田の運転日数') print(costX) print(norma) print(prodX) # 運転コスト/週(目的関数) problem += Sum(costX[i]*x[i], i), '全運転コスト' # 製品ノルマ prod = Sum(prodX[i,j]*x[i], i) prod.name = '製品の生産量' problem += prod >= norma[j], '製品ノルマ' # 求解 print(problem) problem.solve(**kwds) # 結果出力 print(x.val) print(prod.val) print(problem.objective.val)
[ドキュメント]def oil6(**kwds): """油田問題(整数変数)""" from pysimple import Problem, Element, Parameter, IntegerVariable, Sum problem = Problem(name='油田問題6') # 油田を表す添字 i = Element(value=[0, 1], name='油田') # 製品を表す添字 j = Element(value=['重油', 'ガス'], name='製品') # 油田 i の運転コスト/日 costX = Parameter(index=i, value={0: 180, 1: 160}, name='油田運転コスト') # 製品 j のノルマ/週 norma = Parameter(index=j, value={'重油': 12, 'ガス': 24}, name='製品ノルマ') # 油田 i の製品 j 生産量/日 prodXvalue = {(0,'重油'): 6, (0,'ガス'): 4, (1,'重油'): 1, (1,'ガス'): 6} prodX = Parameter(index=(i,j), value=prodXvalue, name='油田の生産量') # 油田 i の運転日数(変数) x = IntegerVariable(lb=0, ub=5, index=i, name='油田の運転日数') print(costX) print(norma) print(prodX) # 運転コスト/週(目的関数) problem += Sum(costX[i]*x[i], i), '全運転コスト' # 製品ノルマ prod = Sum(prodX[i,j]*x[i], i) prod.name = '製品の生産量' problem += prod >= norma[j], '製品ノルマ' # 求解 print(problem) problem.solve(**kwds) # 結果出力 print(x.val) print(prod.val) print(problem.objective.val)
[ドキュメント]def oil7(**kwds): """油田問題(結果出力関数)""" from pysimple import Problem, Element, Parameter, IntegerVariable, Sum, Printf problem = Problem(name='油田問題7') # 油田を表す添字 i = Element(value=[0, 1], name='油田') # 製品を表す添字 j = Element(value=['重油', 'ガス'], name='製品') # 油田 i の運転コスト/日 costX = Parameter(index=i, value={0: 180, 1: 160}, name='油田運転コスト') # 製品 j のノルマ/週 norma = Parameter(index=j, value={'重油': 12, 'ガス': 24}, name='製品ノルマ') # 油田 i の製品 j 生産量/日 prodXvalue = {(0,'重油'): 6, (0,'ガス'): 4, (1,'重油'): 1, (1,'ガス'): 6} prodX = Parameter(index=(i,j), value=prodXvalue, name='油田の生産量') # 油田 i の運転日数(変数) x = IntegerVariable(lb=0, ub=5, index=i, name='油田の運転日数') print(costX) print(norma) print(prodX) # 運転コスト/週(目的関数) problem += Sum(costX[i]*x[i], i), '全運転コスト' # 製品ノルマ prod = Sum(prodX[i,j]*x[i], i) prod.name = '製品の生産量' problem += prod >= norma[j], '製品ノルマ' # 求解 print(problem) problem.solve(**kwds) # 結果出力 Printf('油田 {} の最適運転日数 = {:.0f}', i, x[i].val) print(prod.val) print(problem.objective.val)
if __name__ == '__main__': from sys import argv from . import tutorial if argv[1:]: for arg in argv[1:]: getattr(tutorial, arg)() else: oil1() oil2() oil3() oil4() oil5() oil6() oil7()