当前位置: 首页 > 编程笔记 >

Python二次规划和线性规划使用实例

丌官招
2023-03-14
本文向大家介绍Python二次规划和线性规划使用实例,包括了Python二次规划和线性规划使用实例的使用技巧和注意事项,需要的朋友参考一下

这篇文章主要介绍了Python二次规划和线性规划使用实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

对于二次规划(quadratic programming)和线性规划(Linear Programming)问题

MATLAB里是有quadprog函数可以直接用来解决二次规划问题的,linprog函数来解决线性规划问题。Python中也有很多库用来解决,对于二次规划有CVXOPT, CVXPY, Gurobi, MOSEK, qpOASES 和 quadprog; 对于线性规划有Gurobi,PuLP, cvxopt。

目前发现quadprog进行pip install quadprog不成功,而cvxopt成功了,就先说cvxopt的使用。

安装

conda install -c conda-forge cvxopt

安装非常顺利

使用

cvxopt有自己的matrix格式,因此使用前得包装一下

对于二次规划:

def cvxopt_solve_qp(P, q, G=None, h=None, A=None, b=None):
  P = .5 * (P + P.T) # make sure P is symmetric
  args = [cvxopt.matrix(P), cvxopt.matrix(q)]
  if G is not None:
    args.extend([cvxopt.matrix(G), cvxopt.matrix(h)])
    if A is not None:
      args.extend([cvxopt.matrix(A), cvxopt.matrix(b)])
  sol = cvxopt.solvers.qp(*args)
  if 'optimal' not in sol['status']:
    return None
  return np.array(sol['x']).reshape((P.shape[1],))

对于线性规划:

def cvxopt_solve_lp(f, A, b):
  #args = [cvxopt.matrix(f), cvxopt.matrix(A), cvxopt.matrix(b)]
  #cvxopt.solvers.lp(*args)
  sol = cvxopt.solvers.lp(cvxopt.matrix(f), cvxopt.matrix(A), cvxopt.matrix(b))
  return np.array(sol['x']).reshape((f.shape[0],))

参考:

Quadratic Programming in Python

Linear Programming in Python with CVXOPT

cvxopt.org

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 问题内容: 是否有适用于Python的混合整数线性编程(MILP)求解器? GLPK python可以解决MILP问题吗?我读到它可以解决混合整数问题。 我是线性编程问题的新手。因此,如果混合整数编程与混合整数线性编程(MILP)不同,我会很困惑,无法真正区分。 问题答案: Pulp 是一个python建模接口,可连接到 CBC (开源), CPLEX (商业), Gurobi (商业), XPR

  • 一定要设置最大内存maxmemory参数,否则物理内存用爆了就会大量使用Swap,写RDB文件时的速度很慢。注意这个参数指的是info中的used_memory,在一些不利于jmalloc的时候,内存碎片会很大。 多留55%内存是最安全的。重写AOF文件和RDB文件的进程(即使不做持久化,复制到Slave的时候也要写RDB)会fork出一条新进程来,采用了操作系统的Copy-On-Write策略(

  • 多路线规划 单路线规划 历史记录 规划结果

  • 从本质上说,我想最小化覆盖消费的成本。这些规则或多或少有以下几点: 每一个客户(我们有几百万个客户)消费不同的物品,这是不同的每一个客户。我们有许多产品,每一个包括一个或多个项目,在给定的成本。产品和成本对所有客户来说都是共同的。此外,还有一些附加的限制因素将哪些产品可以为每个客户组合在一起,但这些限制因素对所有客户来说都是相同的。我正在计划使用Spark解决这个问题,我不熟悉它的算法在这个问题上

  • 支持选择单起点、多终点,进行单路线规划,规划出的道路是一条,各个终点将按照最优路径串连 出行方式 汽车出行 自行车出行 起点 确定起点的方式有两种: 方式一:搜索;即输入关键字,进行模糊匹配,匹配的结果分为:POI点、网点、网点图层类型 也就是说可以从这三类数据里找到你需要的起点 方式二:地图点选;点选后,鼠标移动到地图上,右击选中位置 终点 确定终点的方式有两种: 方式一:搜索;即输入关键字,进

  • 多路线规划,指的是一次输入一个起点,多个终点,输入路线条数,能够对这一批终点规划出您想要的几条路径 出行方式: 汽车 自行车 起点: 方式一:起点支持在地图上点选,选择“地图点选”按钮后,直接鼠标左击地图选择起点 方式二:输入起点名称进行搜索,支持搜索POI、网点名称、网点图层名称;可以从这三类结果里,选中要的网点 终点: 方式一:输入框内支持网点名称、网点图层名称、订单图层名称搜索,其中网点图层