scipy 最优解
参数设置:
c:线性目标函数的系数
数据类型:一维数组
A_ub(可选参数):不等式约束矩阵,A u b A_{ub}A
ub
的每一行指定x xx上的线性不等式约束的系数
数据类型:二维数组
b_ub(可选参数):不等式约束向量,每个元素代表A u b x A_{ub}xA
ub
x的上限
数据类型:一维数组
A_eq(可选参数):等式约束矩阵,A e q A_eqA
e
q的每一行指定x xx上的线性等式约束的系数
数据类型:二维数组
b_eq(可选参数):等式约束向量,A e q x A_{eq}xA
eq
x的每个元素必须等于b e q b_{eq}b
eq
的对应元素
数据类型:一维数组
bounds(可选参数):定义决策变量x xx的最小值和最大值
数据类型: (min, max)序列对
None:使用None表示没有界限,默认情况下,界限为(0,None)(所有决策变量均为非负数)
如果提供一个元组(min, max),则最小值和最大值将用作所有决策变量的界限。
method(可选参数):算法,{‘interior-point’, ‘revised simplex’, ‘simplex’}以上三种算法可选
数据类型:输入如上三种字符串
callback(可选参数):调用回调函数,我的理解是等待被调用的参数 ,如果提供了回调函数,则算法的每次迭代将至少调用一次。回调函数必须接受单个 scipy.optimize.OptimizeResult由以下字段组成:
x:当前解向量
数据类型:一维数组
fun:目标函数的当前值(c T x c^Txc
T
x)
数据类型:浮点数
success:当算法成功完成时为 True
数据类型:布尔值
slack:不等式约束的松弛值(名义上为正值)b u b − A u b x b_{ub}-A_{ub}xb
ub
−A
ub
x
数据类型:一维数组
con:等式约束的残差(名义上为零)b e q − A e q x b_{eq}-A_{eq}xb
eq
−A
eq
x
数据类型:一维数组
phase:正在执行算法的阶段
数据类型:整数
status:表示算法退出状态的整数
数据类型:整数
0 : 优化按名义进行
1 : 达到了迭代限制
2 : 问题似乎不可行
3 : 问题似乎是不收敛
4 : 遇到数值困难
nit:当前的迭代次数
数据类型:整数
message:算法状态的字符串描述符
数据类型:字符串
options(可选参数):求解器选项字典,所有方法都接受以下选项:
数据类型:字典
maxiter:整数,要执行的最大迭代次数
disp:布尔值,设置为True以打印收敛消息,默认值:False
autoscale:布尔值,设置为True以自动执行平衡,如果约束中的数值分开几个数量级,请考虑使用此选项,默认值:False
presolve:布尔值,设置为False可禁用自动预解析,默认值:True
rr:布尔值,设置为False可禁用自动移除冗余,默认值:True
x0(可选参数):猜测决策变量的值,将通过优化算法进行优化。当前仅由’ revised simplex’ 方法使用此参数,并且仅当 x0 表示基本可行的解决方案时才可以使用此参数。
数据类型:一维数组
4、输出格式:
x:在满足约束的情况下将目标函数最小化的决策变量的值
数据类型:一维数组
fun:目标函数的最佳值(c T x c^Txc
T
x)
数据类型:浮点数
slack:不等式约束的松弛值(名义上为正值)b u b − A u b x b_{ub}-A_{ub}xb
ub
−A
ub
x
数据类型:一维数组
con:等式约束的残差(名义上为零)b e q − A e q x b_{eq}-A_{eq}xb
eq
−A
eq
x
数据类型:一维数组
success:当算法成功找到最佳解决方案时为 True
数据类型:布尔值
status:表示算法退出状态的整数
数据类型:整数
0 : 优化成功终止
1 : 达到了迭代限制
2 : 问题似乎不可行
3 : 问题似乎是不收敛
4 : 遇到数值困难
nit:在所有阶段中执行的迭代总数
数据类型:整数
message:算法退出状态的字符串描述符
数据类型:字符串
————————————————
版权声明:本文为CSDN博主「佐佑思维」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45288557/article/details/109139303
import scipy from scipy import optimize import numpy c = numpy.array([2,3]) #最值等式未知数系数矩阵 A_ub = numpy.array([[-1,1],[2,-2]]) #<=不等式左侧未知数系数矩阵 B_ub = numpy.array([1,1]) #<=不等式右侧常数矩阵 #A_eq = numpy.array() 等式左侧未知数系数矩阵 #B_eq = numpy.array() 等式右侧常数矩阵 x = (None,1) #未知数取值范围 y = (None,None) #未知数取值范围 res = scipy.optimize.linprog(c,A_ub,B_ub,bounds = (x,y)) #默认求解最小值,求解最大值使用-c并取结果相反数 print(res)
------------------------------------------------------------------
con: array([], dtype=float64) fun: -8782081992.67068 message: 'The algorithm terminated successfully and determined that the problem is unbounded.' nit: 3 slack: array([0.89792204, 1.20415592]) status: 3 success: False x: array([-1.7564164e+09, -1.7564164e+09])
import scipy from scipy import optimize import numpy c = numpy.array([2,3,-5]) #最值等式未知数系数矩阵 A_ub = numpy.array([[-2,5,-2],[1,3,1]]) #<=不等式左侧未知数系数矩阵 B_ub = numpy.array([-10,12]) #<=不等式右侧常数矩阵 #A_eq = numpy.array() 等式左侧未知数系数矩阵 #B_eq = numpy.array() 等式右侧常数矩阵 x = (0,7) #未知数取值范围 y = (0,7) #未知数取值范围 z = (0,7) res = scipy.optimize.linprog(-c,A_ub,B_ub,[[1,1,1]],[7],bounds = (x,y,z)) #默认求解最小值,求解最大值使用-c并取结果相反数 print(res)
--------------------------------------------------------------------
con: array([1.26250388e-08]) fun: -14.571428538660813 message: 'Optimization terminated successfully.' nit: 5 slack: array([-3.59523238e-08, 3.85714287e+00]) status: 0 success: True x: array([6.42857141e+00, 5.71428573e-01, 1.29236762e-09])
原文地址:https://www.cnblogs.com/qj696/p/15235587.html
- TensorFlow 深度学习笔记 从线性分类器到深度神经网络
- 微信版12306来了!用12306微信小程序买票靠谱吗
- 无需写try/catch,也能正常处理异常
- “人工智能毁灭人类”是一种末世恐惧传染病
- 有状态(Stateful)应用的容器化
- 实现一些字符串操作标准库函数、解决一些字符串问题
- 外卖陷阱,你入坑了么?
- ASP.NET Core的配置(4):多样性的配置来源[上篇]
- 37 个你必须知道的现代数据中心术语
- Python读书笔记7
- 2017年人工智能在游戏领域打败人类,未来我们将何去何从?
- 3杂再破市场行情 6位数结拍
- 将永久存储添加到Red Hat CDK Kit 3.0
- ASP.NET MVC的Razor引擎:RazorView
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Newbe.Claptrap 框架如何实现 Claptrap 的多样性?
- Android TV焦点总结
- 程序这么慢罪魁祸首竟是它
- 知识卡片 信息熵
- 算法篇:树之路径之和
- 听说同学你搞不懂Java的LinkedHashMap,可笑
- 揭开数组的真面目
- DLL导出函数Interface与实现分离
- DUI -实现GDI透明效果
- maven 打包过滤二进制压缩与静态文件失效的事情
- The container name “/xx“ is already in use by container “xx“. You have to remove (or rename) that
- ClickHouse的可视化工具Tabix
- 跳表
- 浅谈AQS
- linux进程调度