大学では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のプログラムのまま実行できそうである.

いいなと思ったら応援しよう!