How to run a .mod file (CPLEX) using python?

被刻印的时光 ゝ 提交于 2020-11-25 04:31:05

问题


I'm trying to compare results from a PLNE model using CPLEX, and I want to use python in order to run this CPLEX model several times and compare the results. How can I run .mod files (those made on CPLEX) in python ? I read stuffs about cplex library on python but, if I understood correctly, it is aimed at making models directly on python... I'm a total noob so any advice would help :)

Thank you !


回答1:


the best is to use the doopl package

For instance,

You may write zootupleset.mod

int nbKids=300;

// a tuple is like a struct in C, a class in C++ or a record in Pascal
tuple bus
{
key int nbSeats;
float cost;
}

// This is a tuple set
{bus} buses=...;

// asserts help make sure data is fine
assert forall(b in buses) b.nbSeats>0;
assert forall(b in buses) b.cost>0;

// decision variable array
dvar int+ nbBus[buses];

// objective
minimize
 sum(b in buses) b.cost*nbBus[b];

// constraints
subject to
{
 sum(b in buses) b.nbSeats*nbBus[b]>=nbKids;
}

tuple solution
{
  int nbBus;
  int sizeBus;
}

{solution} solutions={<nbBus[b],b.nbSeats> | b in buses};

and then the following python code

from doopl.factory import *

# Data

Buses=[
    (40,500),
    (30,400)
    ]

# Create an OPL model from a .mod file
with create_opl_model(model="zootupleset.mod") as opl:
    # tuple can be a list of tuples, a pandas dataframe...
    opl.set_input("buses", Buses)

    # Generate the problem and solve it.
    opl.run()

    # Get the names of post processing tables
    print("Table names are: "+ str(opl.output_table_names))

    # Get all the post processing tables as dataframes.
    for name, table in iteritems(opl.report):
        print("Table : " + name)
        for t in table.itertuples(index=False):
            print(t)

        # nicer display
        for t in table.itertuples(index=False):
            print(t[0]," buses ",t[1], "seats")

gives

Table names are: ['solutions']
Table : solutions
Pandas(nbBus=6, sizeBus=40)
Pandas(nbBus=2, sizeBus=30)
6  buses  40 seats
2  buses  30 seats


来源:https://stackoverflow.com/questions/60598747/how-to-run-a-mod-file-cplex-using-python

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!