CPLEX

 一、优化求解器

从编程的角度,大家可以把它理解为一个专门求解优化/整数规划模型的算法包,你可以用任何编程语言(C/C++、Java、Python)去调用这个包里的方程,只要你把你要求解的整数规划模型目标方程和系数矩阵输入进去(告诉它你要求解的具体问题),它就会给你求解出结果。

二、IBM ILOG Cplex

为线性规划、混合整数规划、二次规划和二次约束规划问题提供灵活的高性能数学规划求解器。这些求解器包括用于混合整数规划的分布式并行算法,支持利用多台计算机来解决难题。是一种商业整数规划求解器。

网址:IBM ILOG CPLEX Optimization Studio

支持模型:混合整数(平方)规划、约束规划问题(Constraint programming)

支持语言:C/C++、Java、Python、Matlab等

特点:支持Benders分解模块(仅此一家)、速度Top2

三、安装

  • 编程语言编译环境选择。(选择你熟悉的语言如C,C++,C#,Python,Java......)
  • CPLEX工具:前往IBM官网注册下载。学术版是不受限的;免费版的都可以使用,但是它限制变量在1000个内。
  • 环境配置:CPLEX和编程软件的版本要对应。

四、求解模型

在Python环境下只需如下四步:

  • 导入CPLEX的包

import cplex

  • 初始化一个优化模型

prob = cplex.Cplex() # 此处的prob可以是任意变量名

  • 输入模型的目标函数、约束条件及变量系数

prob.objective.set_sense(...) # 设置目标方程的取值方向:求最大值/最小值

prob.variables.add(...) # 添加变量

prob.linear_constraints.add(...) # 添加约束条件

  • 直接调用优化求解器的求解方法(method),一键求解

prob.solve()

  • 模型的目标函数和最优解

print("Solution value  = ", prob.solution.get_objective_value())

print(prob.solution.get_values())

# The MIP problem solved in this example is:

#

#   Maximize  x1 + 2 x2 + 3 x3 + x4

#   Subject to

#      - x1 +   x2 + x3 + 10 x4 <= 20

#        x1 - 3 x2 + x3         <= 30

#               x2      - 3.5x4  = 0

#   Bounds

#        0 <= x1 <= 40

#        0 <= x2

#        0 <= x3

#        2 <= x4 <= 3

#   Integers

#       x4

import cplex

prob=cplex.Cplex()

prob.objective.set_sense(prob.objective.sense.maximize)【minimize

my_obj = [1, 2, 3, 1]

my_ub = [40, cplex.infinity, cplex.infinity, 3]

my_lb = [0, 0, 0, 2]

my_ctype = "CCCI"

my_names = ["x1", "x2", "x3", "x4"]

prob.variables.add(obj=my_obj, lb=my_lb,ub=my_ub,types=my_ctype,names=my_names)

my_rhs = [20, 30, 0]

my_rownames = ["r1", "r2", "r3"]

my_sense = "LLE"

rows = [[["x1", "x2", "x3", "x4"], [-1, 1, 1, 10]],

            [["x1", "x2", "x3"], [1, -3, 1]],

            [["x2", "x4"], [1, -3.5]]]

prob.linear_constraints.add(lin_expr=rows, senses=my_sense,rhs=my_rhs, names=my_rownames)

prob.solve()

print("Solution value  = ", prob.solution.get_objective_value())

print(prob.solution.get_values())

四、实际应用

短期水火电调度属于大规模、离散、非线性且非凸的数学规划问题。系统决策变量包括了离散和连续变量;每台机组都有各自的运行约束和物理约束,水电系统中还有库容约束。因此,这一问题在数学上是一个复杂的混合整数规划问题,也是一个NP难题。由于问题的困难性,直接寻找最优解几乎不可能。目前较多采用的为次优化算法,即寻找一个满意的解而不是最优解。近年众多研究表明Lagrange松弛法是一种求解此类问题的有效算法,它的主要优点包括:能够灵活处理多种约束;计算量随着问题规模的增大仅呈线性增长;得到的对偶间隙可以定量评价可行调度方案的优劣;Lagrange乘子有着重要的经济意义等。

但是,即使在这种算法框架下,水电调度子问题仍然没有有效的求解方法。然而,正如上文所述,CPLEX综合了多种算法的优点,它可以在较短的时间内解决多变量的、复杂的、混合整数规划问题,尤其是其中的混合整数优化程序对很多实际的混合整数规划问题的求解都是行之有效的。

五、其他优化求解器

国外: Gurobi

网址:Gurobi - The Fastest Solver - Gurobi

支持模型:混合整数(平方)规划、Constraint programming

支持语言:C/C++、Java、R、Python、Matlab等

特点:速度Top1、价格最高

国内:杉数科技的Cardinal

  • 补充文档

Cplex的几种使用方法总结2019-05-07 - 简书 (jianshu.com)

用CPLEX写个数学模型就这么难? - 简书 (jianshu.com)

用户手册:CPLEX 的示例 - IBM 文档

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CPLEX Lingo是一种优化建模语言,它被广泛应用于数学规划和线性规划问题的解决。它由IBM公司的CPLEX优化引擎所支持,并具有直观、简洁的语法,使得用户可以通过简单的代码编写复杂的优化模型。CPLEX Lingo具有以下特点: 首先,CPLEX Lingo具有大量的内置函数和操作符,可以灵活地处理不同类型的数学约束和目标函数。用户可以使用内置的数学函数进行数值计算,如求和、乘积和幂等。此外,CPLEX Lingo还提供了常用的操作符,如加减乘除和逻辑运算符,以支持复杂的逻辑条件。 其次,CPLEX Lingo可以轻松地定义和修改优化模型。通过使用变量、约束和目标函数来描述模型的各个部分,用户可以通过简单的代码行创建和调整模型。此外,CPLEX Lingo还提供了丰富的模型调整工具,允许用户对模型进行参数化和敏感性分析。 第三,CPLEX Lingo具有强大的求解能力和高效的算法。它使用先进的线性规划和整数规划算法,可以高效地求解复杂的优化问题。CPLEX Lingo还提供了各种求解方法和技术选项,如割平面、分支定界和启发式算法,可以根据问题的特性选择最合适的求解策略。 最后,CPLEX Lingo具有友好的用户界面和丰富的文档支持。它提供了直观的可视化工具,可以帮助用户理解和调试优化模型。此外,CPLEX Lingo还提供了详细的文档和示例代码,以帮助用户快速上手和解决问题。 总之,CPLEX Lingo是一种强大而灵活的优化建模语言,可以帮助用户轻松地构建和求解复杂的优化问题。无论是学术研究还是实际应用,CPLEX Lingo都是一个强大的工具,可以大大提高问题求解的效率和精度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值