返回顶部
首页 > 资讯 > 后端开发 > Python >Python解决非线性规划中经济调度问题
  • 828
分享到

Python解决非线性规划中经济调度问题

2024-04-02 19:04:59 828人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录1、概述2、scipy.optimize.minimize参数3、简单案例引出(1)Scipy.optimize实现(2)遗传算法包实现 (—sko.GA&

1、概述

今天重点讲非线性规划中scipy.optimize.minize库在非线性规划中的应用。Scipy 是 python 算法库和数学工具包,包括最优化、线性代数、积分、插值、特殊函数、傅里叶变换、信号和图像处理、常微分方程求解等模块。 

scipy.optimize 模块中提供了多个用于非线性规划问题的方法,适用于不同类型的问题。

brent():单变量无约束优化问题,混合使用牛顿法/二分法。

fmin():多变量无约束优化问题,使用单纯性法,只需要利用函数值,不需要函数的导数或二阶导数。

leatsq():非线性最小二乘问题,用于求解非线性最小二乘拟合问题。

minimize():约束优化问题,使用拉格朗日乘子法将约束优化转化为无约束优化问题。

2、scipy.optimize.minimize参数

scipy.optimize.minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options=None)

解释:

  • fun: 求最小值的目标函数
  • x0:变量的初始猜测值,如果有多个变量,需要给每个变量一个初始猜测值。minimize是局部最优的解法,所以
  • args:常数值,后面demo会讲解,fun中没有数字,都以变量的形式表示,对于常数项,需要在这里给值
  • method:求极值的方法,官方文档给了很多种。一般使用默认。每种方法我理解是计算误差,反向传播的方式不同而已,这块有很大理论研究空间
  • constraints:约束条件,针对fun中为参数的部分进行约束限制

3、简单案例引出

(1)Scipy.optimize实现

import numpy as np
from scipy.optimize import minimize
#目标函数
def fun(args1):
    a,b,c,d=args1
    r=lambda x:(a*x[0]*x[0]+b*x[1]*x[1]+c*x[2]*x[2]+d)
    return r
def con(args2):
    x0min,x1min,x2min=args2
    cons=({'type':'eq','fun':lambda x:-x[0]-x[1]**2+2},
          {'type':'eq','fun':lambda x:x[1]+2*x[2]**2-3},
          {'type':'ineq','fun':lambda x:x[0]**2-x[1]+x[2]**2},
          {'type': 'ineq', 'fun': lambda x: -(x[0]+x[1]**2+x[2]**2-20)},
          {'type':'ineq','fun':lambda x:x[0]-x0min},
          {'type':'ineq','fun':lambda x:x[1]-x1min},
          {'type':'ineq','fun':lambda x:x[2]+x2min})
    return cons
def main():
    args1=(1,2,3,8)
    args2=(0,0,0)
    cons=con(args2)
    x0=np.array((1,2,3))    #初值
    res=minimize(fun(args1),x0,method='SLSQP',constraints=cons)
    print('minf(x):',res.fun)
    print(res.success)
    print('x:',[np.around(i) for i in res.x])
    print('x1:',res.x[0])
    print('x2:',res.x[1])
    print('x3:',res.x[2])
    #另一种表述
    print("optimization problem(res):{}".fORMat(res.x))
    print("Xopt={}".format(res.x))
    print("minf(x)={:.4f}".format(res.fun))
 
if __name__ == "__main__":
    main()

输出结果

minf(x): 13.878994794551044
True
x: [1.0, 1.0, 1.0]
x1: 0.6743061260520056
x2: 1.1513878035150682
x3: 0.961408393062538
optimization problem(res):[0.67430613 1.1513878  0.96140839]
Xopt=[0.67430613 1.1513878  0.96140839]
minf(x)=13.8790
 
Process finished with exit code 0

(2)遗传算法包实现 (—sko.GA&sko.DE)

#from sko.DE import DE   #差分进化法
from sko.GA import GA   #遗传算法
def obj_func(p):
    x1, x2, x3 = p
    return x1 ** 2 + 2*x2 ** 2 + 3*x3 ** 2+8
 
 
constraint_eq = [
    lambda x: -x[0]-x[1]**2+2,
    lambda x: x[1]+2*x[2]**2-3
]
 
constraint_ueq = [
    lambda x: -x[0]**2+x[1]-x[2]**2,
    lambda x: x[0]+x[1]**2+x[2]**2-20
]
 
#de = DE(func=obj_func, n_dim=3, size_pop=50, max_iter=800, lb=[0, 0, 0],constraint_eq=constraint_eq, constraint_ueq=constraint_ueq)
ga = GA(func=obj_func, n_dim=3, size_pop=50, max_iter=800, lb=[0, 0, 0],
        constraint_eq=constraint_eq, constraint_ueq=constraint_ueq)
 
 
#best_x, best_y = de.run()
best_x, best_y = ga.run()
print('best_x:', best_x, '\n', 'best_y:', best_y)

输出结果

best_x: [1. 1. 1.] 
 best_y: [14.]
 
Process finished with exit code 0

4、电力系统中应用——经济调度

(1)案例

(2)Scipy.optimize实现 

import numpy as np
from scipy.optimize import minimize
#目标函数(FG1+FG2+FG3)
def fun(args1):
    a0,a1,a2,b0,b1,b2,c0,c1,c2=args1
    v=lambda x:(a0+a1*x[0]+a2*x[0]*x[0]
                +b0+b1*x[1]+b2*x[1]*x[1]
                +c0+c1*x[2]+c2*x[2]*x[2])
    return v
def con(args2):
    D,x0min,x0max,x1min,x1max,x2min,x2max=args2
    cons=({'type':'eq','fun':lambda x:D-x[0]-x[1]-x[2]},
          {'type':'ineq','fun':lambda x:x[0]-x0min},
          {'type':'ineq','fun':lambda x:-x[0]+x0max},
          {'type':'ineq','fun':lambda x:x[1]-x1min},
          {'type':'ineq','fun':lambda x:-x[1]+x1max},
          {'type':'ineq','fun':lambda x:x[2]-x2min},
          {'type':'ineq','fun':lambda x:-x[2]+x2max})
    return cons
def main():
    args1=(4,0.3,0.0007,3,0.32,0.0004,3.5,0.3,0.00045)
    args2=(700,100,200,120,250,150,300)
    cons=con(args2)
    x0=np.array((150,250,200))    #初值
    res=minimize(fun(args1),x0,method='SLSQP',constraints=cons)
    print('FGi-代价:',res.fun)
    print(res.success)
    print('PGi—解:',[np.around(i) for i in res.x])
    print('PG1:',res.x[0])
    print('PG2:',res.x[1])
    print('PG3:',res.x[2])
 
if __name__ == "__main__":
    main()

输出结果

FGi-代价: 305.9673913046252
True
PGi—解: [176.0, 250.0, 274.0]
PG1: 176.0874477123534
PG2: 250.0
PG3: 273.9125522876465
 
Process finished with exit code 0

(3)粒子群包实现(pyswarm)

pyswarm是一个支持带约束的粒子群优化包,sko.PSO中的pso仅支持带上下限的约束,不支持等式和不等式约束,所以不太喜欢。

from pyswarm import pso
 
def object_func(x):
    return (4+0.3*x[0]+0.0007*x[0]*x[0]+3+0.32*x[1]+0.0004*x[1]*x[1]+3.5+0.3*x[2]+0.00045*x[2]*x[2])
 
#不等式约束
 
def cons1(x):
    return [x[0]+x[1]+x[2]-700]
 
lb = [100, 120, 150]#
ub = [200, 250, 300]
 
xopt, fopt = pso(object_func,lb,ub,ieqcons=[cons1], maxiter=100,swarmsize=1000)
print(xopt)
print(fopt)

输出结果

Stopping search: Swarm best objective change less than 1e-08
[179.34039956 250.         270.65960045]
305.97956393103044
 
Process finished with exit code 0

以上就是Python解决非线性规划中经济调度问题的详细内容,更多关于Python 非线性规划的资料请关注编程网其它相关文章!

--结束END--

本文标题: Python解决非线性规划中经济调度问题

本文链接: https://lsjlt.com/news/117688.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python解决非线性规划中经济调度问题
    目录1、概述2、scipy.optimize.minimize参数3、简单案例引出(1)Scipy.optimize实现(2)遗传算法包实现 (—sko.GA&...
    99+
    2024-04-02
  • python求解线性规划问题
    要在 Python 中求解线性规划问题,通常可以使用 scipy.optimize.linprog 函数。首先,确保你已经安装了 scipy 库。如果你还没有安装,可以通过以下命令进行安装: pip ...
    99+
    2023-09-26
    python 组合优化
  • 利用scipy.optimize.minimize()求解有约束、非线性规划问题
    '''scipy.optimize.minimize(目标函数obj,初始点,constraints=cons,bounds=bd)此函数有很多参数,这里介绍主要参数obj:目标函数,最小值形式,常用lambda函数进行构造bounds: ...
    99+
    2023-09-12
    scipy python
  • python中如何处理线性规划问题
    这篇文章主要为大家展示了“python中如何处理线性规划问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python中如何处理线性规划问题”这篇文章吧。说明问题定义,确定决策变量、目标函数和约...
    99+
    2023-06-20
  • python中求解线性规划的包是什么
    这篇文章主要介绍python中求解线性规划的包是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!说明Scipy库提供简单的线性或非线性规划问题。但不能解决背包问题的0-1规划问题,或者整数规划问题,混合整数规划问题...
    99+
    2023-06-20
  • C++中的动态规划子序列问题怎么解决
    今天小编给大家分享一下C++中的动态规划子序列问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、子序列(不连续)...
    99+
    2023-07-05
  • C++动态规划中关于背包问题怎么解决
    本篇内容主要讲解“C++动态规划中关于背包问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++动态规划中关于背包问题怎么解决”吧!一、分割等和子集-最后一块石头的重量II背包问题,难...
    99+
    2023-07-05
  • 解决mybatis无法给带有下划线属性赋值问题
    目录mybatis无法给带有下划线属性赋值问1、配置问题2、增加set方法转换值的方式解决方法实体类中有下滑线字段无法赋值问题mybatis无法给带有下划线属性赋值问 1、配置问题 ...
    99+
    2024-04-02
  • python遗传算法之单/多目标规划问题怎么解决
    这篇“python遗传算法之单/多目标规划问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python遗传算法之单...
    99+
    2023-06-30
  • Java调度线程池ScheduledThreadPoolExecutor不执行问题怎么解决
    本篇内容主要讲解“Java调度线程池ScheduledThreadPoolExecutor不执行问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java调度线程池ScheduledTh...
    99+
    2023-07-05
  • Python中怎么解决非平衡数据问题
    Python中怎么解决非平衡数据问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。SMOTE算法的介绍在实际应用中,读者可能会碰到一种比较头疼的问题,那就是分类...
    99+
    2023-06-17
  • python调用dll出现精度问题如何解决
    本文小编为大家详细介绍“python调用dll出现精度问题如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“python调用dll出现精度问题如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。遇到的问题...
    99+
    2023-07-05
  • 解决python中os.system调用exe文件的问题
    前一段时间导师叫我写一个批处理的小程序,就是循环修改辐射传输模型软件MODTRAN的输入参数,然后运行MODTRAN软件进行计算,输出 需要的结果。我这里用的是python写的小程序,那就需要考虑用python调用M...
    99+
    2022-06-02
    python os.system 调用exe文件
  • Python 并发编程中的经典算法:利用多线程解决棘手问题
    多线程编程是 Python 中解决复杂问题的一种强大技术。通过同时执行多个任务,它可以提高程序的效率和性能。本文探讨了 Python 中的经典算法,展示了如何利用多线程来增强其功能。 多线程、Python、经典算法、并行处理、棘手问题 ...
    99+
    2024-02-18
  • 【运筹优化】拉格朗日松弛 & 次梯度算法求解整数规划问题 + Java调用Cplex实战
    文章目录 一、拉格朗日松弛二、次梯度算法三、案例实战 一、拉格朗日松弛 当遇到一些很难求解的模型,但又不需要去求解它的精确解,只需要给出一个次优解或者解的上下界,这时便可以考虑采用松弛模...
    99+
    2023-10-26
    运筹优化 算法 Java 拉格朗日松弛 次梯度算法
  • 如何解决win7电脑中没有调节亮度功能问题
    这篇文章主要讲解了“如何解决win7电脑中没有调节亮度功能问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何解决win7电脑中没有调节亮度功能问题”吧!解决方法/步骤:打开运行窗口,直接...
    99+
    2023-06-27
  • 如何解决PHP开发中的高并发任务调度问题
    概述:在PHP开发过程中,高并发任务调度是一个常见的挑战。尤其是在大型的网站或应用中,任务调度可能会涉及到同时执行、竞争资源和性能等问题。本文将介绍一些解决高并发任务调度问题的方法,并提供具体的代码示例。使用消息队列:消息队列是一种高效的任...
    99+
    2023-10-21
    高并发 任务调度 PHP开发
  • 分析并解决Golang调试过程中GLIDE速度太慢问题
    在Golang中使用GLIDE为代码管理和构建带来了许多方便,但是在实际应用中,GLIDE在构建时可能会变得太慢,这可能是由许多因素引起的。在本文中,我们将介绍Golang调试过程中GLIDE速度太慢的原因以及如何解决这些问题。GOPROX...
    99+
    2023-05-14
  • python编程项目中线上问题排查与解决
    目录问题描述问题分析问题解决总结文 | 極光 来源:Python 技术「ID: pythonall」 最近开发中遇到个小问题,因为业务上的设计存在问题,导致数据库表总是被锁...
    99+
    2024-04-02
  • 【运筹优化】带时间窗约束的车辆路径规划问题(VRPTW)详解 + Python 调用 Gurobi 建模求解
    文章目录 一、概述1.1 VRP 问题1.2 CVRP 问题1.3 VRPTW 问题 二、VRPTW 的一般模型三、Python 调用 Gurobi 建模求解3.1 Solomn 数据集3...
    99+
    2023-09-04
    算法 人工智能 VRPTW 车辆路径规划 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作