• 用python做线性规划


    scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None, bounds=None, method='simplex', callback=None, options=None)

    from scipy import optimize as op
    import numpy as np
    c=np.array([2,3,-5])
    A_ub=np.array([[-2,5,-1],[1,3,1]])
    B_ub=np.array([-10,12])
    A_eq=np.array([[1,1,1]])
    B_eq=np.array([7])
    x1=(0,7)
    x2=(0,7)
    x3=(0,7)
    res=op.linprog(-c,A_ub,B_ub,A_eq,B_eq,bounds=(x1,x2,x3))
    print(res)

    很容易发现,c指的应该是要求最大值的函数的系数数组,A_ub是应该是不等式未知量的系数矩阵,仔细观察的人应该发现,为什么第一行里面写的是[-2,5,-1]而不是[2,5,-1]呢,应该要与图里对应才对啊,原来这不等式指的是<=的不等式,那如果是>=呢,乘个负号就行了。A_eq就是其中等式的未知量系数矩阵了。B_ub就是不等式的右边了,B_eq就是等式右边了。bounds的话,指的就是每个未知量的范围了。我们看一下结果

         con: array([0.])
         fun: -14.571428571428571
     message: 'Optimization terminated successfully.'
         nit: 8
       slack: array([0.        , 3.85714286])
      status: 0
     success: True
           x: array([6.42857143, 0.57142857, 0.        ])

    重点关注的就是第一行和最后一行了,第一行是整个结果,最后一行是每个x的结果。为什么第一行是负的呢?原来这个函数其实是求最小值的,那么求最大值,怎么办呢?很简单,仔细观察的人应该发现,之前的函数里面,我写的是-c,而不是c。那么这个函数的出来的结果其实就是-c的最小值,但很明显这恰恰是c最大值的相反数。那么答案就是14.57了,以上。
    ---------------------
    作者:your_answer
    来源:CSDN
    原文:https://blog.csdn.net/your_answer/article/details/79131000
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    linux动态库(.so)和静态库(.a)的区别
    LeetCode刷题笔记和想法(C++)
    tf-idf、朴素贝叶斯的短文本分类简述
    计算机操作系统(第三版)读书笔记
    react hook封装一个排序按钮,有效果图
    react使用fetch封装请求的方法-简单易懂
    react开发企业中后台产品、政务门户网站的一些总结
    git常见命令以及基本使用
    Linux系统下fd分配的方法
    netfilter-IPv4实现框架分析(一)
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/11180848.html
Copyright © 2020-2023  润新知