【问题标题】:How to run a .mod file (CPLEX) using python?如何使用 python 运行 .mod 文件(CPLEX)?
【发布时间】:2020-03-09 10:34:57
【问题描述】:

我正在尝试使用 CPLEX 比较 PLNE 模型的结果,并且我想使用 python 多次运行此 CPLEX 模型并比较结果。如何在 python 中运行 .mod 文件(在 CPLEX 上制作的文件)? 我在 python 上阅读了有关 cplex 库的内容,但是,如果我理解正确,它旨在直接在 python 上制作模型...... 我是个菜鸟,所以任何建议都会有所帮助:)

谢谢!

【问题讨论】:

    标签: python cplex


    【解决方案1】:

    最好使用doopl

    对于instance

    你可以写 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};
    

    然后是下面的python代码

    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")
    

    给予

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-11
      相关资源
      最近更新 更多