2024年Python最新非线性规划----经济调度(Python实现),掌握这套精编Python高级面试题解析

现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。

分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

今天重点讲非线性规划中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]+bx[1]x[1]+cx[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§:

x1, x2, x3 = p

return x1 ** 2 + 2x2 ** 2 + 3x3 ** 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+a1x[0]+a2x[0]*x[0]

+b0+b1x[1]+b2x[1]*x[1]

+c0+c1x[2]+c2x[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},

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值