人工智能 --- Python求解线性和非线性规划问题
基于jupyter notebook的Python编程
- 一、线性规划问题求解
- 1、Excel中大M法与Excel的“规划求解”包对实际问题的求解比较
- 实际例题:
- 求解以下约束条件的线性规划的最大值和最优解
- 使用大M法对实际问题的求解
- 使用Excel的“规划求解”包对实际问题的求解
- 2、Python求解线性规划问题
- 2.1 新建txt文档,填入线性回归分析标准化模型
- 2.2 Python使用单纯法对实际线性规划问题的求解
- 2.3 Python使用scipy库对实际线性规划问题的求解
- 3、结果对比分析
- 3.1 单纯形法结果
- 3.2 scipy结果
- 二、非线性规划问题的求解
- 1、等式约束下的拉格朗日乘子法
- 2、Python实现对带约束的非线性规划求解
- 求解实际例题
- 2.1 Python编程实现求解
- 2.2 python使用SciPy库实现求解问题
- 3、Python求解结果对比分析
- 3.1普通法求解结果
- 3.2 scipy库求解结果
- 参考链接:
- https://blog.csdn.net/qq_42451251/article/details/105597806
- https://blog.csdn.net/kittyzc/article/details/81707464
- https://blog.csdn.net/sinat_17697111/article/details/81534935
- https://blog.csdn.net/qq_33757398/article/details/82834888?fps=1&locationNum=2
1、线性规划中的单纯形法、大M法的excel求解、python编程求解和python包求解;
2、非线性规划的拉格朗日乘子法的手工数学推导、python编程和python包求解;
一、线性规划问题求解
1、Excel中大M法与Excel的“规划求解”包对实际问题的求解比较
实际例题:
求解以下约束条件的线性规划的最大值和最优解
使用大M法对实际问题的求解
使用Excel的“规划求解”包对实际问题的求解
在Excel中将数据及相应的公式写入到Excel里
通过Excel自带的“规划求解”功能,将结果求解出来
2、Python求解线性规划问题
2.1 新建txt文档,填入线性回归分析标准化模型
新建txt文档,写入标准化模型系数,如下所示
2.2 Python使用单纯法对实际线性规划问题的求解
python 代码如下
import numpy as np #导入相应的库
import sys
def solve(d,bn):while max(list(d[0][:-1])) > 0:l = list(d[0][:-2])jnum = l.index(max(l)) #转入下标m=[]for i in range(bn):if d[i][jnum] == 0:m.append(0.)else:m.append(d[i][-1]/d[i][jnum]) inum = m.index(min([x for x in m[1:] if x!=0])) #转出下标s[inum-1] = jnum #更新基变量d[inum] /= d[inum][jnum]for i in range(bn):if i != inum:d[i] -= d[i][jnum] * d[inum]def printSol(d,cn):for i in range(cn - 1):if i in s:print("x"+str(i)+"=%.2f" %d[s.index(i)+1][-1])else:print("x"+str(i)+"=0.00")print("objective is %.2f"%(-d[0][-1]))
d = np.loadtxt("F:/data.txt", dtype=np.float)
(bn,cn) = d.shape
s = list(range(cn-bn,cn-1)) #基变量列表
solve(d,bn)
printSol(d,cn)
运行结果:
x0=0.00
x1=1.00
x2=3.00
x3=0.00
x4=2.00
x5=0.00
x6=0.00
objective is 32.00
2.3 Python使用scipy库对实际线性规划问题的求解
整体代码如下:
#导入包
from scipy import optimize
import numpy as np
#确定c,A_ub,B_ub
c = np.array([1,14,6])
A_ub = np.array([[1,1,1],[1,0,0],[0,0,1],[0,3,1]])
B_ub = np.array([4,2,3,6])
#求解
res =optimize.linprog(-c,A_ub,B_ub)
print(res)
运行结果:
con: array([], dtype=float64)
fun: -31.99999999819265
message: ‘Optimization terminated successfully.’
nit: 4
slack: array([6.62327970e-11, 2.00000000e+00, 3.88720167e-10, 3.41993101e-10])
status: 0
success: True
x: array([3.06911596e-10, 1.00000000e+00, 3.00000000e+00])
从代码中可以发现
c:c指的应该是要求最大值的函数的系数数组
A_ub:A_ub是应该是不等式未知量的系数矩阵,也就是不等式左边
B_ub:B_ub就是不等式的右边了,也就是不等式右边
3、结果对比分析
3.1 单纯形法结果
3.2 scipy结果
通过对两个的结果分析,可以看出单纯形法的结果更加具体,因为结果为整数;对于SciPy库,其运算结果为小数,是否更加具体不知道,但是两个的运算结果相差不大,其误差也比较小,所以可以选择忽略。
二、非线性规划问题的求解
1、等式约束下的拉格朗日乘子法
公式推导:这里只是简单的放了一张图片对等式约束下拉格朗日乘子法的求解步骤进行了讲解。
2、Python实现对带约束的非线性规划求解
求解实际例题
2.1 Python编程实现求解
Python代码:
#导入sympy包,用于求导,方程组求解等等
from sympy import * #设置变量
x1 = symbols("x1")
x2 = symbols("x2")
alpha = symbols("alpha")
#beta = symbols("beta")#构造拉格朗日等式
L = 60 - 10*x1 - 4*x2 + x1*x1 + x2*x2 - x1*x2 - alpha * (x1 + x2 - 8)#求导,构造KKT条件
difyL_x1 = diff(L, x1) #对变量x1求导
difyL_x2 = diff(L, x2) #对变量x2求导
difyL_alpha = diff(L, alpha) #对alpha求导#求解KKT等式
aa = solve([difyL_x1, difyL_x2, difyL_alpha], [x1, x2, alpha])
print(aa)
运行结果:
{x1: 5, x2: 3, alpha: -3}
2.2 python使用SciPy库实现求解问题
python代码如下:
from scipy.optimize import minimize
import numpy as np #目标函数:
def func(args):fun = lambda x: 60 - 10*x[0] - 4*x[1] + x[0]**2 + x[1]**2 - x[0]*x[1]return fun#约束条件,包括等式约束和不等式约束
def con(args):cons = ({'type': 'eq', 'fun': lambda x: x[0]+x[1]-8})return cons if __name__ == "__main__":args = ()args1 = ()cons = con(args1)x0 = np.array((2.0, 1.0)) #设置初始值,初始值的设置很重要,很容易收敛到另外的极值点中,建议多试几个值#求解#res = minimize(func(args), x0, method='SLSQP', constraints=cons)print(res.fun)print(res.success)print(res.x)
运行结果:
17.000000000000007
True
[4.99999994 3.00000006]
3、Python求解结果对比分析
3.1普通法求解结果
3.2 scipy库求解结果
通过两个Python程序的求解结果对比分析,两个的求解结果相差不大,并且误差都在一定范围内,所以可以认为两个的求解结果是一致的。
参考链接:
https://blog.csdn.net/qq_42451251/article/details/105597806
https://blog.csdn.net/kittyzc/article/details/81707464
https://blog.csdn.net/sinat_17697111/article/details/81534935
https://blog.csdn.net/qq_33757398/article/details/82834888?fps=1&locationNum=2
人工智能 --- Python求解线性和非线性规划问题相关推荐
- 数学建模:非线性规划的 Python 求解
目录 一般形式 Python 求解 1. scipy.optimize.minimize 函数 调用方式: 参数: 返回: 例 1 例 2 2. cvxopt.solvers 模块求解二次规划 标准型 ...
- python求解一阶线性偏微分方程通解举例
python求解一阶线性偏微分方程的通解举例 Python求解偏微分方程也是其一个应用方面,下面举例说明. 一.问题: 求一阶线性偏微分方程 x ∂ f ( x , y ) ∂ x − y ∂ f ( ...
- 线性与非线性规划——单纯形法python实现
线性与非线性规划--单纯形法python实现 单纯形法原理及python实现,时间:2022/1/11 本文不对单纯形方法进行讲解,若有需要请参照<最优化理论与算法第二版>(陈宝林著) ...
- python 方程组 整数解_用Python语言求解线性整数方程组
我在寻找一种用Python求解线性方程组的方法. 特别是,我在寻找大于所有零的最小整数向量,并解出给定的方程. 例如,我有以下等式: 想解决 .在 在这种情况下,求解该方程的最小整数向量为 .在 但是 ...
- 用Python求解线性规划问题
线性规划简介及数学模型表示线性规划简介一个典型的线性规划问题线性规划模型的三要素线性规划模型的数学表示图解法和单纯形法图解法单纯形法使用python求解简单线性规划模型编程思路求解案例例1:使用sci ...
- 【人工智能】Fisher 线性分类器的设计与实现(QDU)
[人工智能]Astar算法求解8数码问题(QDU) [人工智能]利用α-β搜索的博弈树算法编写一字棋游戏(QDU) [人工智能]Fisher 线性分类器的设计与实现(QDU) [人工智能]感知器算法的 ...
- 人工智能数学课高等数学线性微积分数学教程笔记(1. 数学内容概述)
前言 对人工智能数学课高等数学线性微积分数学教程的学习笔记.主要用于快速回忆已学的数学知识点,不适合基础学习.博客园中同步更新. 文章目录 人工智能数学课高等数学线性微积分数学教程笔记(目录) 人工智 ...
- 线性与非线性规划:随机方向法
文章目录 前言 一.随机方向法 二.算法实现 1.算法步骤 2.算法细节 3.代码示例 4.示例 总结 前言 本系列涉及线性与非线性规划中的几种规划算法 1.本节介绍随机方向法 2.参考:陈宝林-最优 ...
- 人工智能数学课高等数学线性微积分数学教程笔记
目录 1. 数学内容概述 2. 一元函数微分学 - 导数 - 导数的定义 - 左导数.右导数和右导数 - 几何意义与物理意义 - 求导公式 - 基本函数 - 四则运算法则 - 复合函数求导法则 - 用 ...
最新文章
- VMware Esxi5.1.0开启ssh服务的方法
- bootstrap4导航栏点击弹出表单_Bootstrap4从入门到精通
- 在centos6.5安装MariaDB(mysql)
- MySQL使用命令备份和还原数据库
- 浅谈移动Web开发:深入概念
- 记录 之 跨服务器上传和下载文件
- 《HTML5+CSS3网页设计入门必读》——1.13 测验
- PostgreSQL 12系统表(11)pg_user
- python的cgi配置教程_Python CGI环境在不同操作系统中配置方法
- A股收盘:深证区块链50指数跌1.75%,*ST群兴、亚联发展涨停
- 【杂文】【演化学习】platEMO提取缓存Data
- 提交数据网页设计_数据化时代,爬虫工程师才是真正“扛把子”
- Hive map阶段缓慢,优化过程详细分析
- dw中html5快捷键,DW快捷键大全
- 企业权限管理系统之AdminLTE的基本介绍(一)
- H5 页面在 APP 里如何支持缩放,并隐藏手机自带的放大缩小图标。
- 辨析:工作路径与脚本路径
- 合泰单片机点灯c语言程序,ht66f018合泰单片机暖风机的C语言源程序
- 深度解读AMBA、AHB、APB、AXI总线
- 浏览器推荐-以Windows操作系统为例
热门文章
- 怎么彻底清除计算机病毒,Win7旗舰版系统如何才能彻底删除电脑病毒
- jy-12-SPRINGMYBATIS02——云笔记09-刘苍松
- 手机用户对手机游戏的偏好调查
- Access denied for user ‘xxx‘@‘localhost‘ 错误
- VIO中IMU选型与数据处理
- 我跪了!OpenAI发布DALL·E 2!AI化身「现实主义画师」,有详细论文!
- 读取 STM32F10x 内部基准电压。
- html图片滚动首尾互联,网页中多个图片首尾相接来回滚动
- android gatekeeper(locksetting密码锁)学习这一篇就够了
- Spring Boot入门到精通(超详细)