用python编程处理线性和非线性规划问题

文章目录

  • 用Excel求解线性规划问题
  • 用Anaconda Jupyter Notebook求解线性规划问题(Python)
  • 用拉格朗日方法求解以下问题

线性规划的基本思想
为求解决策变量,需要将目标函数、约束条件表达为决策变量的函数式,若约束条件和目标函数都是线性的,即表示约束条件的数学式子都是线性等式或线性不等式,表示问题最优化指标的目标函数都昌线性函数,则该问题就是线性规划的问题。
例如,在前面某工厂生产资源配置的问题中,设商品A和商品B的产量分别为x1和x2,则有决策变量:x1和x2。
目标函数(subject to,简称s.t.)﹔利润L=2x1+32最大化,记为max(L)=2x1+3x2。.所满足的约束条件:原材料甲的限量,4x1≤20﹔原材料乙的限量,4x2≤12;设备丙的限量,x1+2x2≤9;商品A和商品B的产量为正整数,x1≥0,2≥0。
由于约束条件和目标函数都是线性的,因此这是线性规划问题。
显然,对于该工厂而言,可行的生产计划有很多,线性规划所要解决的问题是在多个可行的生产计划中找出一个利润最大的,即求一组变量x1,x2的值,使其满足约束条件,并使目标函数L=2x1+3x2的值最大(即利润最大)。线性规划有很多算法,比如单纯形法、图解法、分解法等。随着计算机技术和统计软件的发展,可借助于LINGO、MATLAB、WinQSB、Exce1等多种软件求解。
由于Excel普及性最广,因此这里用Exce1对甲厨电公司市场部所面临的媒体组合问题进行线性规划求解。

用Excel求解线性规划问题

  1. 根据文件建立数据源

  2. 三要素
    设日间电视、夜间电视、网络媒体、平面媒体、户外广告的使用次数依次为x1、x2、x8、4、5,咨询电话量为L,则5种媒体资源配置的三要素如下。
    (1)决策变量:x1、x2、x3、4、x5。
    (2)目标函数(s.t.)﹔咨询电话量L=600x1+800x2+500x3+400x4+300x5最大化。(3)所满足的约束条件:
    电视广告费用不超过3万元,1000x1+2000x2≤30000。电视广告次数至少进行20次,x1+x2≥20。
    广告总费用不超过4万元,1000x1+200072+400x3+1000x4+100x5≤40000。
    被告知人数至少10万元人:2000x1+4000x2+3000x3+5000x4+600x5≥100000。各媒体使用次数不超过次数限量,x1≤14; x2≤8;x3≤40;x4≤5;x5≤50。各媒体使用次数均为正整数。

  3. 设置目标函数
    目标函数:E2,E6和F2,F6的元素的乘积之和
    对应函数:=SUMPRODUCT (E2:E6,F2:F6)

  4. 添加约束条件并规划求解
    决策变量和目标函数

    添加约束条件

L=600x1+800x2+500x3+400x4+300x5
1000x1+2000x2≤30000
1000x1+200072+400x3+1000x4+100x5≤40000
2000x1+4000x2+3000x3+5000x4+600x5≥100000
x1+x2≥20
x1≤14;
x2≤8;
x3≤40;
x4≤5;
x5≤50







求解

最终结果

用Anaconda Jupyter Notebook求解线性规划问题(Python)

约束条件同上
导入scipy包求解最优解和最大值

from scipy import optimize
import numpy as np
#创建矩阵,c为目标函数的矩阵,A_ub为约束条件的左边构成的矩阵,B_ub为约束条件的右边
c=np.array([600,800,500,400,300])
A_ub=np.array([[1000,2000,0,0,0],[-1,-1,0,0,0],[1000,2000,400,1000,100],[-2000,-4000,-3000,-5000,-600],[1,0,0,0,0],[0,1,0,0,0],[0,0,1,0,0],[0,0,0,1,0],[0,0,0,0,1]])
B_ub=np.array([30000,-20,40000,-100000,14,8,40,5,50])
# 求解
res=optimize.linprog(-c,A_ub,B_ub)
print(res)

用拉格朗日方法求解以下问题

from sympy import *
# 设置变量
x,y,z,k = symbols('x,y,z,k')
a,b,c=symbols('a,b,c')
f = 8*x*y*z
g = x**2/a**2+y**2/b**2+z**2/c**2-1
#构造拉格朗日函数
L=f+k*g
#求导
dx = diff(L, x)   # 对x求偏导
print("dx=",dx)
dy = diff(L,y)   #对y求偏导
print("dy=",dy)
dz = diff(L,z)   #对z求偏导
print("dz=",dz)
dk = diff(L,k)   #对k求偏导
print("dk=",dk)
dx= 8*y*z + 2*k*x/a**2
dy= 8*x*z + 2*k*y/b**2
dz= 8*x*y + 2*k*z/c**2
dk= -1 + z**2/c**2 + y**2/b**2 + x**2/a**2
#求出个变量解
m= solve([dx,dy,dz,dk],[x,y,z,k])
print(m)
#变量赋值
x=sqrt(3)*a/3
y=sqrt(3)*b/3
z=sqrt(3)*c/3
k=-4*sqrt(3)*a*b*c/3
#计算方程的值
f = 8*x*y*z
print("方程的最大值为:",f)

结果

人工智能与机器学习学习笔记(三)相关推荐

  1. 吴恩达《机器学习》学习笔记三——多变量线性回归

    吴恩达<机器学习>学习笔记三--多变量线性回归 一. 多元线性回归问题介绍 1.一些定义 2.假设函数 二. 多元梯度下降法 1. 梯度下降法实用技巧:特征缩放 2. 梯度下降法的学习率 ...

  2. 吴恩达机器学习学习笔记第七章:逻辑回归

    分类Classification分为正类和负类 (规定谁是正谁是负无所谓) 吴恩达老师举例几个例子:判断邮箱是否是垃圾邮箱 一个在线交易是否是诈骗 一个肿瘤是良性的还是恶性 如果我们用之前学习的lin ...

  3. R语言与机器学习学习笔记(分类算法)

    转载自:http://www.itongji.cn/article/0P534092014.html 人工神经网络(ANN),简称神经网络,是一种模仿生物神经网络的结构和功能的数学模型或计算模型.神经 ...

  4. MIT Artificial Intelligence —— Patrick H. Winston 麻省理工人工智能公开课学习笔记(一)

      本系列文章是博主对网易公开课中麻省理工人工智能课程的学习笔记,在此方便学习和分享. Lecture 1: Introduction and Scope   本节课程大概从这三方面讲述:   一.什 ...

  5. 【机器学习笔记】可解释机器学习-学习笔记 Interpretable Machine Learning (Deep Learning)

    [机器学习笔记]可解释机器学习-学习笔记 Interpretable Machine Learning (Deep Learning) 目录 [机器学习笔记]可解释机器学习-学习笔记 Interpre ...

  6. 天池龙珠训练营-机器学习学习笔记-03 LightGBM 分类

    天池龙珠训练营-机器学习学习笔记-03 LightGBM 分类 本学习笔记为阿里云天池龙珠计划机器学习训练营的学习内容,学习链接为:训练营 一 原理简介: 它是一款基于GBDT(梯度提升决策树)算法的 ...

  7. J2EE学习笔记三:EJB基础概念和知识 收藏

    J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...

  8. tensorflow学习笔记(三十二):conv2d_transpose (解卷积)

    tensorflow学习笔记(三十二):conv2d_transpose ("解卷积") deconv解卷积,实际是叫做conv_transpose, conv_transpose ...

  9. Ethernet/IP 学习笔记三

    Ethernet/IP 学习笔记三 原文为硕士论文: 工业以太网Ethernet/IP扫描器的研发 知网网址: http://kns.cnki.net/KCMS/detail/detail.aspx? ...

  10. iView学习笔记(三):表格搜索,过滤及隐藏列操作

    iView学习笔记(三):表格搜索,过滤及隐藏某列操作 1.后端准备工作 环境说明 python版本:3.6.6 Django版本:1.11.8 数据库:MariaDB 5.5.60 新建Django ...

最新文章

  1. c++十六进制加法_C++中输出十六进制形式的字符串
  2. 聊天机器人有了长期记忆,遇到不懂的还能上网搜索,网友:像极了不懂装懂时偷偷百度的我...
  3. python网络编程库_Python网络编程——协程
  4. LESSON 10.110.210.3 SSE与二分类交叉熵损失函数二分类交叉熵损失函数的pytorch实现多分类交叉熵损失函数
  5. boost::thread_group相关的测试程序
  6. scrapy框架的概念和流程
  7. android释放焦点_Android videoview抢占焦点的处理方法
  8. python 温度插值nan处理_Python处理inf和Nan值,pytorch,nan,数值
  9. 如何用高德地图定位生成二维码_OSM地图本地发布如何生成各省市矢量地图
  10. 如何对MacBook上坏掉的USB-C接口进行故障排除?
  11. 如何对接GN EDI系统?
  12. 高分辨率扫描出来的图片有摩尔纹_文档扫描仪选购指南:扫描仪哪个牌子比较好?...
  13. 串口总线舵机之舵机运行
  14. 微信小程序云开发之简单两步实现集成赞赏加群弹窗功能
  15. Linux网络问题排查
  16. 后台运行命令nohup、job 等
  17. 关于win10“你未连接到任何网络“解决方法
  18. 从零学前端第一讲:前端开发是什么?给初学者有什么建议?
  19. 微信小程序 request:fail url not in domain list
  20. vba遍历字符串_Notes-VBA-遍历

热门文章

  1. linux安装后进不去windows,linux双系统安装后进不去windows解决办法
  2. Mybatis3全面详解
  3. c语言cg平台答案,【2017年整理】非常好的C语言习题集带答案.doc
  4. 腾讯 QQ for Linux 的安装及 tar.gz版本QQ 建立快捷方式
  5. 深入浅出设计模式---3、代理模式和工厂模式
  6. 3500常用汉字书法体检测数据集
  7. 微信小程序大全:767个小程序
  8. win10 安装SQL Server 2005
  9. 实现有管理功能的ASP留言板
  10. VB--Adodc控件