• 线性规划


    最优化算法是一个很大的家族,线性规划只是很简单的一种,本文旨在引导大家理解什么叫最优化,简单说就是 在 所有 x 里面找到 y 最大的方法

    线性规划

    优化模型试图在满足给定约束的决策变量的所有值的集合中,找到优化(最大化或最小化)目标函数的决策变量的值。

    它的三个主要组成部分是:

    • 目标函数:要优化的函数(最大化或最小化)。
    • 决策变量:影响系统性能的可控变量。
    • 约束:决策变量的一组约束(即线性不等式或等式)。非负性约束限制了决策变量取正值。  【约束都是线性的,故叫线性规划】

    优化模型的解称为最优可行解。

    示例

    import numpy as np
    import matplotlib.pyplot as mpl
    from scipy import optimize
    
    ### 问题
    # minmize:
    #        -7x1+7x2-2x3-x4-6x5
    # s.t.:
    #        3x1-x2+x3-2x4=-3
    #        2x1+x2+x4+x5=4
    #        -x1+3x2-3x4+x6=12
    #        xi>=0
    
    ### 线性规划代码
    c = np.array([-7, 7, -2, -1, -6, 0])
    a = np.array([[3, -1, 1, -2, 0, 0], [2, 1, 0, 1, 1, 0], [-1, 3, 0, -3, 0, 1]])
    b = np.array([-3, 4, 12])
    
    res = optimize.linprog(c, A_eq=a, b_eq=b, bounds=((0, None), (0, None), (0, None), (0, None), (0, None), (0, None)))
    print(res)
    
    # con: array([-6.18438634e-12, -1.54809499e-12, 1.85451654e-11])
    # fun: -16.50000000001507
    # message: 'Optimization terminated successfully.'
    # nit: 6
    # slack: array([], dtype=float64)
    # status: 0
    # success: True
    # x: array([4.31310891e-13, 3.96214625e-13, 2.56502186e-13, 1.50000000e+00,
    #           2.50000000e+00, 1.65000000e+01])

    fun 是最终的 y,x 为对应的解

    注意:约束必须是有限的可行解,不能是无穷解

    更多用法

    更完整的示例请看参考资料

    如 xi>0 的约束如何表示

    通过 [-1,0,0]*x1=-x1来表示 x1的非负约束

    参考资料:

    https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.linprog.html  官网

    https://www.cnblogs.com/caiyishuai/p/11175373.html  【数学建模】线性规划各种问题的Python调包方法

    https://baijiahao.baidu.com/s?id=1666564495926266704&wfr=spider&for=pc  使用Python进行线性规划示例

  • 相关阅读:
    contentWindow,contentDocument, docuemnt ,window,self,top,parent,opener的关系
    我总结有用的WEB工具站点
    谈谈checkbox的几种状态
    第一章-CSS和文档 ---@import 命令
    第一章-CSS和文档 ---元素
    js的几种简单排序算法及其效率实测
    js高程(二)-----继承
    js高程(一)-----创建对象的几种模式
    event.target
    百度前端技术学院--热身题
  • 原文地址:https://www.cnblogs.com/yanshw/p/14547843.html
Copyright © 2020-2023  润新知