PythonからCplexを呼び出す
PythonからCplexを呼び出す方法のメモ
Cplexはすでにインストール済みとする.
まずは,pythonからcplexモジュールを使えるようにする.
Windowsの場合は
C://Program Files/IBM/ILOG/CPLEX_Studio1263/cplex/python/2.7/x64_win64/
Macの場合は
~/Applications/IBM/ILOG/CPLEX_Studio126/cplex/python/x86-64_osx/
にあるsetup.pyを以下のように実行する:
python setup.py install
次のLPを解くことを考える.
max 20 x + 30 y s.t. x + 2 y <= 800 3 x + 4 y <= 1800 3 x + y <= 1500 x,y >= 0
次のようなpythonプログラムを書くことで最適解を求めることができる.
import cplex var = ['x', 'y'] # variables b = [20, 30] # objective function c = [800, 1800, 1500] # constraints A = [ [var, [1, 2]], [var, [3, 4]], [var, [3, 1]], ] prob = cplex.Cplex() prob.objective.set_sense(prob.objective.sense.maximize) # maximization problem prob.variables.add(obj=b, names=var) prob.linear_constraints.add(lin_expr=A, senses=['L']*3, rhs=c) prob.solve() x = prob.solution.get_values() for i in range(len(var)): print "{} = {}".format(var[i], x[i]) print prob.solution.get_objective_value()
- 目的関数
- 最小化問題を解きたい場合は,
prob.objective.set_sense(prob.objective.sense.minimize)
- 制約
- 不等式の向き(sense)は,'L', 'E', 'G'で,≦,=, ≧を表す.
- 各行について,リストの0番目を変数の一部にすることで,係数0の変数を省略できる.
- 変数
- デフォルトは非負実数
- variables.addをするときに,下界をlbで,上界をubで,変数の型をtypeで指定できる.
- typeは'B','I','N','C','S'があり,それぞれ{0,1},整数,非負整数,実数,非負実数
- 例えば -3<=x<=7 なる整数変数を用意したい場合は,
prob.variables.add(names=['x'], lb=[-3], ub=[7], types=['I'])