运筹优化问题有时候极其复杂,我们可以使用运筹优化工具库帮助数学建模,解决复杂的最优化问题,本文介绍几个常见的运筹优化工具库。
cplex
CPLEX是IBM公司开发的一款商业版的优化引擎,可以用于求解线性规划、二次规划、带约束的二次规划、二阶锥规划等四类基本问题,以及相应的混合整数规划问题。它有免费的社区版,可以用C++, Python, Java等语言调用。它也提供了一个Excel插件和一个交互式优化器。
使用CPLEX的应用程序编程接口(API):这是一种直接在编程语言中调用CPLEX的方法,可以利用编程语言的功能和灵活性。你可以用C++, Python, Java等语言编写优化模型和算法,并调用CPLEX的函数来求解。你需要先安装CPLEX的库文件,并在代码中引入相应的头文件或模块。
使用建模语言:这是一种用专门的语法来描述优化模型的方法,可以简化模型的表达和求解。你可以用OPL, AMPL, GAMS等建模语言来定义变量、约束、目标函数等,并调用CPLEX作为求解器。你需要先安装建模语言的软件,并在代码中指定使用CPLEX。
gurobi
ortools
pulp
geatpy
定义优化问题,包括变量的范围、约束条件、目标函数等。 选择合适的编码方式,如二进制编码、排列编码等,以及相应的交叉、变异、选择等算子。 创建一个遗传算法模板类的对象,并设置相关的参数,如种群规模、进化代数、交叉概率等。 调用遗传算法模板类的run()方法来执行进化过程,并获取最优解和目标函数值。 分析和展示优化结果,如绘制收敛曲线、评价指标等。
pyomo
scipy
scipy.optimize.minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options=None)
fun:目标函数 x0:初始值 args:传递给目标函数和约束函数的额外参数 method:求解方法,如’SLSQP’、'COBYLA’ jac:目标函数的梯度或者梯度计算函数 hess:目标函数的海森矩阵或者海森矩阵计算函数 hessp:目标函数的海森矩阵乘以向量p或者海森矩阵乘以向量p计算函数 bounds:变量的边界约束,元组列表形式 constraints:其他约束条件,字典列表形式 tol:终止条件的容差值 callback:回调函数,在每次迭代后调用 options:其他选项,字典形式
x:最优解 success:是否成功找到最优解 status:终止状态码 message:终止原因描述信息 fun:最小目标值 jac:最小点处梯度值(如果可用) hess: 最小点处海森矩阵(如果可用) nfev: 目标值评估次数
cvxpy
import cvxpy as cp
import numpy as np
# Generate data.
m = 20
n = 15
np.random.seed(1)
A = np.random.randn(m, n)
b = np.random.randn(m)
# Define and solve the CVXPY problem.
x = cp.Variable(n)
cost = cp.sum_squares(A @ x - b)
prob = cp.Problem(cp.Minimize(cost), [0 <= x, x <= 1])
prob.solve()
# Print result.
print("\nThe optimal value is", prob.value)
print("The optimal x is")
print(x.value)
print("The norm of the residual is ", cp.norm(A @ x - b, p=2).value)
pyvrp
jsprit
OptaPlanner
Scikit-opt
pot
POT (Python Optimal Transport)是一个用于求解最优运输问题的Python库。最优运输问题是一种在两个概率分布之间寻找最低成本映射的问题,它有许多应用,例如图像处理、机器学习、计算机视觉等。
领域自适应:这是一种在不同的数据分布之间转移知识的技术。POT可以用于通过最优运输来对齐源域和目标域的特征分布,从而提高分类或回归的性能。
形状匹配:这是一种在计算机视觉中寻找两个形状之间相似性的技术。POT可以用于通过最优运输来建立形状之间的对应关系,并且可以加入拉普拉斯正则化来保持形状的拓扑结构。
测度聚类:这是一种在概率测度空间中进行聚类分析的技术。POT可以用于通过切片或拉东Wasserstein距离来定义测度之间的相似性,并且可以求解测度的Wasserstein重心作为聚类中心。
正负无标签学习:这是一种在只有正样本和无标签样本的情况下进行分类学习的技术。POT可以用于通过部分最优运输来估计无标签样本中正样本和负样本的比例,并且可以利用最优运输距离来定义损失函数和正则化项。
还有许多运筹优化库,后续继续更新介绍。
微信公众号后台回复
加群:加入全球华人OR|AI|DS社区硕博微信学术群
资料:免费获得大量运筹学相关学习资料
人才库:加入运筹精英人才库,获得独家职位推荐
电子书:免费获取平台小编独家创作的优化理论、运筹实践和数据科学电子书,持续更新中ing...
加入我们:加入「运筹OR帷幄」,参与内容创作平台运营
知识星球:加入「运筹OR帷幄」数据算法社区,免费参与每周「领读计划」、「行业inTalk」、「OR会客厅」等直播活动,与数百位签约大V进行在线交流
文章须知
文章作者:用户007
微信编辑:疑疑
文章转载自『Python学习杂记』公众号,原文链接: 运筹优化工具库介绍(一)
关注我们
FOLLOW US