精华内容
下载资源
问答
  • 请问谁用过CPLEX 之类的 求解混合整数规划(Mixed integer prgramming)的matlab插件 mex file1.能给我传一个直接可用(好用)的么。。。万分感谢网上找了好几天, 下了几个 如cplex cplexint xpress 都不能用 不是需要...

    请问谁用过CPLEX 之类的 求解混合整数规划(Mixed integer prgramming)的matlab插件 mex file

    1.能给我传一个直接可用(好用)的么。。。 万分感谢

    网上找了好几天, 下了几个 如cplex cplexint  xpress  都不能用 不是需要编译(什么gcc Mingw and Cygwin)

    虽然我大一的时候学过c语言..... 还是郁闷

    Unable to load mex file: E:\academic\MATLAB7\cplexint\cplexint.dll.

    The specified module could not be found.

    ??? Invalid MEX-file 'E:\academic\MATLAB7\cplexint\cplexint.dll': The specified module could not be found.

    2. 谁知道 matlab 插件中的 *.c 文件和  *.m 文件之间到底是什么关系 那*.dll呢?

    我理解是*.c 经过编译生成m文件  m文件相当于matlab可以直接调用的函数

    谁对这个熟悉啊 联系下 万分感谢..

    QQ 274890886

    展开全文
  • 证明了任何一个变量有界的整数规划问题( IP)和混合整数规划问题(M IP)都可以转化为一个 等价的非整数(或连续化)规划问题(N IP) , 并给出一个用非线性精确罚函数法来求解该等价N IP 的方 法, 从而达到求解 ...
  • SCIP:优化求解器介绍题主学习SCIP起因是CPLEX并不支持列生成算法,经过一番打听,发现SCIP(Solving Constraint Integer Programs)一款非常成熟的开源混合整数规划(MILP)框架,支持自定义搜索树中的各个模块,当然...

    SCIP:优化求解器介绍

    题主学习SCIP起因是CPLEX并不支持列生成算法,经过一番打听,发现SCIP(Solving Constraint Integer Programs)一款非常成熟的开源混合整数规划(MILP)框架,支持自定义搜索树中的各个模块,当然包括在分支限界(Branch and Bound)过程中添加变量的功能,如获至宝。SCIP核心库由C写成,有相应的C++封装函数,相比CPLEX,GUROBI等商业软件,上手难度比较高。现在运筹学应用中,基本以调库为主,但是要想对切平面(Cut),启发式算法(Heuristic)和分支算法(Branch)等问题进行研究,开源软件是必不可少的。开源项目COIN-OR也提供了不少代码供学术界研究,SCIP是相对比较完备的框架。SCIP在编译的时候可以选择使用商业线性规划求解器。

    本文主要挑一些SCIP的重点介绍,具体细节可以参考官方网站。

    SCIP起源:

    SCIP的起源于ZIB(Zuse Institute Berlin),由博士生Tobias Achterberg奠定整个框架,经过进一步发展到2019年有了6.0.1版本。Tobias毕业后加入IBM CPLEX团队,之后跳槽到GUROBI,因此GUROBI还提高了软件的售价。整个SCIP的基础可以参见他的400多页的毕业论文https://opus4.kobv.de/opus4-zib/files/1112/Achterberg_Constraint_Integer_Programming.pdf。SCIP之所以命名成整数约束规划求解器,是因为他的技术结合了整数线性规划(Integer Linear Programming)和约束规划(Constraint Programming)的技术。整数线性规划理论根植于多面体理论(Polyedral Theory)和切平面(Cutting Plane)理论,以及算法中的搜索技术;约束规划起源于约束满足问题,这个视角下整数线性规划约束被视为一组合取范式(CNF),利用冲突分析(Conflict Analysis)和领域传播(Domain Propagation)迭代缩小决策变量的定义域,以减小搜索空间。

    其实比较令人感兴趣的是前言中关于他的博士生涯的介绍,我们可以看到大神的成长之路由诸多因素构成,在此截取一些片段以飨读者。

    Tobias在2000年的硕士论文做的是用神经网络学习混合整数规划中的分支(Branch)策略。他在此获得了ZIB某位成员的整数规划(MIP)求解器,分析并学习了其中原理。他的博士题目是利用混合整数规划设计大规模集成电路(VALSE),他意识到解决这个问题最好的方案是结合整数线性规划和约束规划。从2002年开始,在博士的头两年里,他一直进行着SCIP的开发,这期间他的导师给了他极大的自由和耐心,因为这两年间没有发表一篇文章,要知道德国博士一般也就3-4年(Tobias在2007年毕业)。在此期间他又从工业界的合作者中拿到了数据进行测试。在此期间他还结识了一位白俄罗斯从事整数规划的研究者Yakov Novikov,学习了冲突分析技术(其中有一段趣闻,此人刚到柏林被俄罗斯黑帮误认为他是携带大笔现金来德国买车的东欧人,这些人抢劫时,他出示了自己的一摞论文证明自己只是一个贫穷的研究者后,还是被释放了)。当他写了25万行C的代码后,发现自己离毕业时间不多,那也是是他30岁的生日,他才开始写作毕业论文。

    到现在为止,SCIP已经由众多开发者共同维护,文档和功能也比较丰富。

    SCIP框架:

    SCIP库由C写成,SCIP的程序分模块编写,每个模块由一个.h和.c声明和定义,并对应于混合整数规划的算法的一个模块,分别有:

    Constraint handlers: 约束处理模块,一般每一类需要特殊处理的约束会构建一个handler专门处理。一般来说,这个模块定义的约束都与问题本身有关,特别是这类约束的实例太多或者约束是非线性的时候,算法需要在根据松弛解判断是否满足此约束,然后再添加禁止这个解产生的约束。

    Variable pricers: 变量定价模块,分支定价和列生成所需要的模块,用于在线性规划求松弛解之后添加变量,如果主问题有可行解,在PRICERREDCOST函数根据reduced cost添加列;如果主问题没有可行解,在PRICERFARKAS中由对偶单纯形根据Farkas Lemma添加列。注意,列是指搜索时候纳入线性规划中的部分变量。

    Presolvers: 预处理器,最好你的问题定义的时候比较简约,不需要预处理。

    Separators: 分割模块,根据当前松弛解生成切平面对应的约束,使得问题更紧。一般来说,这个模块定义的约束都是为了生成整数解,比如各种的切平面不等式。

    Propagators: 传递模块,利用约束规划的冲突分析,收紧变量的范围。

    Branching rules: 分支规则模块,略过。

    Node selectors: 节点选择模块,略过。

    Primal Heuristics: 主启发式模块,在线性规划求松弛解之前,通过启发式算法得到一个好的可行解。

    File readers: 文件读取模块,略过。

    Diving heuristics: 下搜启发式模块,控制深度优先搜索。

    Event handler: 事件处理模块,以上模块都会在搜索树的节点的某个过程中触发,都属于一种特殊的事件处理模块。

    以上模块,可以用C写或者用C++的封装类定义。一般来说,每个模块对应都需要初INIT,EXIT,INITSOL,EXITSOL函数,分别用于初始化和退出经过预处理的问题和没有经过预处理的问题。如果没有专门写并添加到SCIP类中,会执行默认模块或者不执行此模块。

    根据这篇教程,各个模块对算法效率的影响:分支规则(219%), 切平面分割(117%), 预处理(48%), 主启发(34%, 对于找到第一个可行解319%), 节点选择(28%),领域传播(20%),冲突分析(14%)。

    下图解释了各个模块在一个节点的调用顺序。

    2eb582b4604c05bcbc92ef59266345b1.png

    以及在节点的循环步骤,十分复杂,可以学到很多

    5f5c0acb176b05c1770c9b9cd7bdff1e.png

    c8ac8922dea1f6da3dedfb274b9cfbbf.png

    接下来是一些个人建议。

    SCIP安装:

    SCIP拥有独立的安装包,支持Windows,Linux还有Macos系统,不过这些安装包的默认编译方式采用SoPlex作为线性规划的求解器。如果想用其他求解器需要,自己在编译并指定,SCIP

    支持Cmake和make系统。建议,在Linux或者Macos环境下编译,因为SCIP还需要一些其他几个包,windows系统安装这些包会非常麻烦。

    SCIP数据结构和内存管理:

    SCIP的样例代码,内存管理皆为调用SCIP的库函数,用于在堆区分配全局数据和在栈区分配搜索节点的数据。如果用C写得话,建议还是手动调用分配函数;如果用C++的话,对于全局数据,比如Probdata,直接new,delete操作即可,至于定义于节点的函数,采用a = A()的方式,交给编译器自动在栈上创建和释放。

    SCIP学习路线:

    配合官方文档,教程,Tobias的论文,以及Exemples和Applications里面的样例学习。

    展开全文
  • 数学编程 线性规划和混合整数规划问题
  • 运筹学----------------------------------------混合整数规划和指派问题 如果指导的好,请关注点赞。
  • 基于混合整数规划的死锁检测方法的研究
  • 一种基于多代理模型的混合整数规划优化方法
  • Capacity scaling method这里和大家分享的 Capacity scaling method 是根据带有固定费用的...这里我们来考虑一个一般的带有固定费用的混合整数规划 (MIP) 问题。 在 中 是变动费用, 是固定费用。(Capacity scalin...

    353b8b4ae4c2d1227be8a82c979c5def.png

    参考文献

    benderswww.arvinzyy.cn
    f3c1a26e9e9c0173756e5faa7fd7e8da.png

    这篇分享用的模型是上面这个链接中的。


    Capacity scaling method

    这里和大家分享的 Capacity scaling method 是根据带有固定费用的优化问题的特殊构造而产生的算法。

    这里我们来考虑一个一般的带有固定费用的混合整数规划 (MIP) 问题。

    是变动费用,
    是固定费用。

    (Capacity scaling method)

    1. 设定平滑化参数
      ,把变化的容量参数
      的初期值设定为
    2. 反复执行以下操作,直到满足适当的收束条件后停止。(比如,线性规划松弛问题的解
      距离 0 或者1 十分接近)
    • 把0-1变量
      松弛为
      ,约束条件变为
      ,解线性规划松弛问题。
    • 得到的线性松弛规划问题的解
      来更新容量

    Capacity scaling method 求解速度很快,并且得到是局部最优解。如果想跳出局部最优解,需要另外结合其他的方法。

    Exercise

    我们给出一个经典的带固定费用的运输问题,模型如下

    是一个很大的实数,可看作为
    的上界,这里我们可设

    中,我们找出带有容量限制的约束条件,即为

    首先,我们初始化

    (也可尝试其他数值),
    ,然后替换上边的约束条件为

    其次,我们把变量

    松弛为

    这样我们得到新的模型,如下

    下面我们调用 Gurobi 来实现这一算法

    import numpy as np
    from gurobipy import *
    
    example = 1
    
    if example == 1:
        # example 1, optimal 350
        num_s = 4
        num_d = 3
        supply = [10, 30, 40, 20]
        demand = [20, 50, 30]
        c = np.array([
            [2, 3, 4],
            [3, 2, 1],
            [1, 4, 3],
            [4, 5, 2]
        ])
        f = np.array(
            [[10, 30, 20] for _ in range(4)]
        )
    
    elif example == 2:
        # example 2, optimal 4541
        num_s = 8
        num_d = 7
        supply = [20, 20, 20, 18, 18, 17, 17, 10]
        demand = [20, 19, 19, 18, 17, 16, 16]
        c = np.array([
            [31, 27, 28, 10, 7, 26, 30],
            [15, 19, 17, 7, 22, 17, 16],
            [21, 17, 19, 29, 27, 22, 13],
            [9, 19, 7, 15, 20, 17, 22],
            [19, 7, 18, 10, 12, 27, 23],
            [8, 16, 10, 10, 11, 13, 15],
            [14, 32, 22, 10, 22, 15, 19],
            [30, 27, 24, 26, 25, 15, 19]
        ]).reshape(num_s, num_d)
        f = np.array([
            [649, 685, 538, 791, 613, 205, 467],
            [798, 211, 701, 506, 431, 907, 945],
            [687, 261, 444, 264, 443, 946, 372],
            [335, 385, 967, 263, 423, 592, 939],
            [819, 340, 233, 889, 211, 854, 823],
            [307, 620, 845, 919, 223, 854, 823],
            [560, 959, 782, 417, 358, 589, 383],
            [375, 791, 720, 416, 251, 887, 235]
        ])
    
    else:
        print("Example not found")
    
    M = np.ones((num_s, num_d))
    for i in range(num_s):
        for j in range(num_d):
            M[i, j] = min(supply[i], demand[j])
    
    params = dict()
    params["num_s"] = num_s
    params["num_d"] = num_d
    params["supply"] = supply
    params["demand"] = demand
    params["c"] = c
    params["f"] = f
    params["M"] = M
    
    mip = Model()
    x = mip.addVars([i for i in range(num_s)], [j for j in range(num_d)], vtype=GRB.CONTINUOUS, name="x")
    y = mip.addVars([i for i in range(num_s)], [j for j in range(num_d)], vtype=GRB.CONTINUOUS,lb=0.0,ub=1.0, name="y")
    mip.setObjective(
        quicksum(
                x[i,j] * c[i,j] + y[i,j] * f[i,j]
                for j in range(num_d)
            for i in range(num_s)
        ), GRB.MINIMIZE
    )
    for i in range(num_s) :
        mip.addConstr((
            quicksum(
                x[i,j] for j in range(num_d)
            ) <= supply[i]
            
        ))
    cons=[]
    for j in range(num_d):
         cons.append(mip.addConstr((
             quicksum(
                 x[i,j] for i in range(num_s)
             ) >= demand[j]
       
         )))
    
    obj_original=quicksum(x[i,j] * c[i,j] + y[i,j] * f[i,j] for j in range(num_d)for i in range(num_s))
    
    mip.setObjective(obj_original,GRB.MINIMIZE)
    mip.update()
    N_0,N_1={},{}
    iterlimit=100
    lambda_value=0.10
    UB=100000
    cons1=[]
    M_bar= np.ones((num_s, num_d))
    M_bar=M.copy()
    for iter in range(iterlimit):
        for i in range(num_s):
            crelax1=[]
            for j in range(num_d):
                crelax1.append(mip.addConstr((
                    x[i,j] <= M_bar[i,j] * y[i,j]  
                )))
            cons1.append(crelax1)
        print("================LP model==================")
        mip.update()
        mip.optimize()
        for i in range(num_s):
            for j in range(num_d):
                M_bar[i, j] = M_bar[i, j]*y[i,j].x*lambda_value+(1-lambda_value)*M_bar[i, j]
                y[i,j].ub=M[i, j]/M_bar[i, j]
                print(y[i,j].x)
    
        for i in range(num_s):
            for j in range(num_d):
                mip.remove(cons1[i][j])
        cons1=[]
    for i in range(num_s):
        for j in range(num_d):
            if y[i,j].x>=0.99:
                N_1[i,j]=1
            else:
                N_0[i,j]=0
    for i in range(num_s):
        crelax=[]
        for j in range(num_d):
            if (i,j) in N_0:
                mip.addConstr((
                    y[i,j]==0  
                ))
                flag=1
            if (i,j) in N_1:
                mip.addConstr((
                    y[i,j]==1  
                ))
    for i in range(num_s):
        for j in range(num_d):
            mip.addConstr((
                x[i,j] <= M[i,j] * y[i,j]  
            ))
    print("================integer model==================")
    mip.update()
    mip.optimize()
    if mip.status==GRB.INFEASIBLE:
        print("****model is infeasible****")
    if mip.status==GRB.OPTIMAL:
        print("****model is optimal****")
        if mip.Objval<=UB:
            UB=mip.Objval
    print("The upper bound is:")
    print(UB)

    这里我们来看example 1,线性规划松弛问题的目标函数值以及变量

    的值如下

    7d0e57ec2132154338c361808a326c22.png

    然后我们经过100次迭代后,线性规划松弛问题的目标函数值以及变量

    值如下

    1965aeafa366de6fef6a18b31237f096.png

    我们可以看出

    的值充分接近0 或者 1,然后我们将其固定为0 或者 1,解
    ,结果如下

    9c592d55e6f714ce8647312952f8e9f4.png

    我们得到了一个近似值为360.0,而真正的最优值为350.0。由此可知这个算例得到的近似值不算差。大家也可尝试验证以下其他的算例。

    大家如果手中有自己的模型之类的一定要尝试一下上述的算法!

    如果有什么疑问或者建议,可以给我发邮件。➡ zhaoyou728 at outlook.com

    展开全文
  • 学过运筹学的小伙伴,可以看这个LP问题的标准型来回顾一下:不太熟悉的朋友可以看这个例题,再结合上面的标准型,来感受一下:MIP混合整数规划Mixed Integar Planing混合整数规划是LP的一种,决策变量部分是整数,不...

    相关知识点

    LP线性规划问题

    Linear Problem

    [百度百科]:研究线性约束条件下线性目标函数的极值问题的数学理论和方法。

    学过运筹学的小伙伴,可以看这个LP问题的标准型来回顾一下:

    9d9b7b62b5cdbb201a84b2fd0ca95ab7.png

    不太熟悉的朋友可以看这个例题,再结合上面的标准型,来感受一下:

    9a006668ee1e2ffb038a042870027b5e.png

    MIP混合整数规划

    Mixed Integar Planing

    混合整数规划是LP的一种,决策变量部分是整数,不要求全部都是整数的规划问题。

    这里MIP的求解器是使用CBC(Corn-or Branch and Cut)

    CBC (COIN-OR Branch and Cut) is an open-source mixed integer programming solver working with the COIN-OR LP solver CLP and the COIN-OR Cut generator library Cgl. The code has been written primarily by John J. Forrest. 更多详情看这里,但是笔者认为没啥必要。

    MIP的Python实现(Ortool库)

    我们来看一道简单的例题:

    80e349c35f667124da32fecd323bc189.png

    其中x,y都是整数

    from ortools.linear_solver import pywraplp

    # 首先,调用CBC求解器

    # 整数规划使用pywraplp.Solver.GLOP_LINEAR_PROGRAMMING

    solver = pywraplp.Solver('SolveIntegerProblem',

    pywraplp.Solver.CBC_MIXED_INTEGER_PROGRAMMING)

    # 定义x和y的定义域,这里是从0到正无穷

    x = solver.IntVar(0.0, solver.infinity(), 'x')

    y = solver.IntVar(0.0, solver.infinity(), 'y')

    # 添加约束:x+7y<17.5

    constraint1 = solver.Constraint(-solver.infinity(), 17.5)

    constraint1.SetCoefficient(x, 1)

    constraint1.SetCoefficient(y, 7)

    # 添加约束:x <= 3.5

    constraint2 = solver.Constraint(-solver.infinity(), 3.5)

    constraint2.SetCoefficient(x, 1)

    constraint2.SetCoefficient(y, 0)

    # 定义目标函数: Maximize x + 10 * y

    bjective = solver.Objective()

    objective.SetCoefficient(x, 1)

    objective.SetCoefficient(y, 10)

    objective.SetMaximization()

    # 获取问题的答案

    result_status = solver.Solve()

    # 判断结果是否是最优解

    assert result_status == pywraplp.Solver.OPTIMAL

    # 验证一下结果是否正确,这一步不是必要但是推荐加上

    assert solver.VerifySolution(1e-7, True)

    # 输出结果

    print('Number of variables =', solver.NumVariables())

    print('Number of constraints =', solver.NumConstraints())

    print('Optimal objective value = %d' % solver.Objective().Value())

    variable_list = [x, y]

    for variable in variable_list:

    print('%s = %d' % (variable.name(), variable.solution_value()))

    可以看一下自己运行的结果:

    f9371373ca9298f292503b9cd0b9bde7.png

    assert

    这里涉及python 的一个assert的语法,不懂得可以简单看一下:

    Python assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。

    断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况,

    c9c6371850b3fca7f95a21cdb9b1c516.png

    MIP的Python实现(docplex库)

    来源:https://www.cnblogs.com/PythonLearner/p/12903612.html

    展开全文
  • 使用python求解混合整数规划问题

    千次阅读 2020-03-27 20:33:57
      摘要:当前使用Python求解混合整数规划问题的实例大多使用了cplex库。本文基于教材上的混合整数规划和0-1整数规划两道例题,尝试使用Python语言予以解决,得到的答案与教材上一致。现将有关求解过程及代码附上,...
  • 提出了一种改进的量子粒子群算法,并将该算法用于求解非线性混合整数规划问题。构造了一种自适应调整的惯性权重,平衡了算法的全局搜索和局部搜索能力;针对混合整数规划问题,给定一定比例的初始可行解,提高了初始种群...
  • 一、混合整数规划基础知识Gurobi MIP求解器,最常求解的问题形式是:目标函数: min 约束: A x = b (线性约束)l ≤ x ≤ u (bound约束)部分或全部 是整数 (整数约束)整数约束使MIP模型可以获得离散特征的决策。...
  • 编者按Branch-and-Cut 是求解整数规划或混合整数规划问题最常用的算法之一。通常,把全部可行解空间反复地分割为越来越小的子集,称为分支;并且对每个子集内的解集计算一个目标下界(对于最小值问题),称为定界;...
  • 一类混合整数规划问题的全局最优性条件,王杉林,,本文研究了带箱约束混合二次规划问题的全局最优性条件。利用全局次微分(L-次微分)方法,对一般二次函数的L-次微分进行了全面刻�
  • 通过仿真模拟充电站2天内电动汽车的充电需求,基于混合整数规划和启发式快速算法求解数学模型,得到2天中充电站的充电决策矩阵和每辆电动汽车的充电欠缺量,验证了所提有序充电控制策略的可行性。仿真结果表明:与...
  • CPLEX求解混合整数规划模型

    万次阅读 2018-02-07 02:34:59
    在CPLEX中,对于混合整数规划模型的求解是其核心功能之一,因此我们对相关CPLEX的示例程序进行了深入的了解。如下:using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
  • 在 因此,我有一个大小等于仓库总数x的数组,每个x[w]是一个整数{0,1},定义仓库w是否打开。 我还有一个由0和1组成的矩阵,定义了哪个仓库为每个客户提供服务。因此,行数与客户数相同,列数与仓库数相同。矩阵称为y...
  • 『运筹OR帷幄』原创作者:路军编者按混合整数规划(MIP),是指同时包含整数变量和连续变量的数学规划。针对二维剪板机下料问题等大规模组合问题,混合整数规划是一种速度快,精度高的求解途径,上较其他方法具有明显...
  • 编者按:本文简单介绍了页岩气公司如何使用混合整数规划优化天然气开采。从结果可以看出,相比于原有策略,优化后的策略可大幅提升天然气产量和公司净现值。文章作者:李灿,现为卡耐基梅隆大学(CMU)化工专业博士生...
  • 作者:路军编者按混合整数规划(MIP),是指同时包含整数变量和连续变量的数学规划。针对二维剪板机下料问题等大规模组合问题,混合整数规划是一种速度快,精度高的求解途径,上较其他方法具有明显优势。本文介绍了二...
  • 论文研究-一类非线性两级混合整数规划问题的全局最优解的近似算法.pdf, 讨论了一类非线性两级混合整数规划的求解问题 .基于非线性混合整数规划理论和算法 ,探讨了对上级...
  • 展开全部第一步:注册IBM id账号第二步:下载相关系统的e69da5e6ba9062616964757a686964616f31333363396432CPLEX(windows/linux/mac)这里需要系统中安装有JAVA,选择 open ...补充JAVA安装:备注:JAVA可以通过rpm...
  • matlab代码适用于解决线性和非线性整数规划混合整数非线性规划问题。
  • 编者按:本文简单介绍了页岩气公司如何使用混合整数规划优化天然气开采。从结果可以看出,相比于原有策略,优化后的策略可大幅提升天然气产量和公司净现值。一、EQT公司简介EQT总部位于宾夕法尼亚州匹兹堡,已有131...
  • SCIP:优化求解器介绍题主学习SCIP起因是CPLEX并不支持列生成算法,经过一番打听,发现SCIP(Solving Constraint Integer Programs)一款非常成熟的开源混合整数规划(MILP)框架,支持自定义搜索树中的各个模块,当然...
  • 流水车间调度问题(FSP)描述为:有n个独立的工件按照相同的工艺路线在m台...以最大完工时间为目标的流水车间的混合整数规划模型: (1) 符号含义: 机器集合里的机器号 机器总数量 工件集合里的工件号 工...
  • 文章目录相关知识点LP线性规划问题MIP混合整数规划MIP的Python实现(docplex库)MIP的Python实现(ortool库) 相关知识点 LP线性规划问题 Linear Problem [百度百科]:研究线性约束条件下线性目标函数的极值...
  • LINGO语言与0_1混合整数规划选址模型的再结合
  • GAMS,优化调度,混合整数规划,gap,求解

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 600
精华内容 240
关键字:

混合整数规划