大学ではGurobiを自宅ではフリーソフトを使いたい.
大学の研究室ではGurobiを使用できるが,自宅に帰っても作業を継続したいということがある.
TeamViewerを使うのも一つの手だが,自宅では,フリーソフト(PySCIPOpt)を使うのがおすすめである.
そのためには,GurobiのプログラムをPySCIPOptに書き換える必要がある.
ここでは,主にchatGPT(Ver.3.5)で変換した例について示す.
例として,久保先生の「あたらしい数理最適化」のp.8のサンプルプログラムを対象にする.
chatGPTにおいて,Translate the provided Gurobi source code into the equivalent code for PySCIPOpt.に続いて,p.8のプログラムを書く.
from gurobipy import *
model = Model("lo1")
x1 = model.addVar(name = "x1")
x2 = model.addVar(name = "x2")
x3 = model.addVar(ub = 30, name = "x3")
model.addConstr(2*x1 + x2 + x3 <= 60)
model.addConstr(x1 + 2*x2 + x3 <= 60)
model.setObjective(15*x1 + 18*x2 + 30*x3, GRB.MAXIMIZE)
model.optimize()
print("Opt. Value =", model.ObjVal)
for v in model.getVars():
print(v.VarName, v.X)
結果,以下のように翻訳されて出てくる.
from pyscipopt import Model
model = Model("lo1")
x1 = model.addVar(name="x1")
x2 = model.addVar(name="x2")
x3 = model.addVar(ub=30, name="x3")
model.addCons(2 * x1 + x2 + x3 <= 60)
model.addCons(x1 + 2 * x2 + x3 <= 60)
model.setObjective(15 * x1 + 18 * x2 + 30 * x3, "maximize")
model.optimize()
print("Opt. Value =", model.getObjVal())
for v in model.getVars():
print(v.getVarName(), v.getVal())
要は,gurobipyをpyscipoptに,GRB.MAXIMIZEを"maximize"に,addConstrをaddConsに,ObjValをgetObjVal()に書き換えているだけである.ただし,このまま実行すると,最後の行でエラーになるので,以下のよう修正する必要がある.
for v in model.getVars():
print(v, model.getVal(v)) #修正箇所
#print(v.getVarName(), v.getVal()) #修正前
その他,PySCIPOptの他にmypulpを使う方法,C-optを使う方法などがある.後者のC-optを使う場合は,久保先生がwrapperを用意されているので,それを使えば,Gurobiのプログラムのまま実行できそうである.