《Python数学建模算法与应用课件》05第5章 非线性规划和多目标规划模型.pptx

《Python数学建模算法与应用课件》05第5章 非线性规划和多目标规划模型.pptx

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共154页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

;;在实际应用中,除了线性规划和整数线性规划之外,还大量地存在着另一类优化问题:描述目标函数或约束条件的数学表达式中,至少有一个是非线性函数,这样的优化问题通常称之为非线性规划。一般说来,解决非线性规划问题要比线性规划问题困难得多,不像线性规划有适用于一般情况的单纯形法,对于非线性规划问题到目前为止还没有一种适用于一般情况的求解方法,现有各种方法都有各自特定的适用范围。

;多目标决策问题是管理与日常生活中经常遇到的问题,而这些目标之间常常是相互作用和矛盾的,如何平衡这些目标,其决策过程十分复杂,决策者通常很难做出最终决策。解决这类问题的建模方法就是多目标决策方法。事实上,早在1772年,富兰克林(Franklin)就提出了多目标矛盾问题如何协调的问题。1838年,古诺(Cournot)从经济学角度提出了多目标问题的模???。1869年,帕累托(Pareto)首次从数学角度提出了多目标最优决策问题。

;;5.1.1非线性规划问题的数学模型

;5.1.2无约束非线性规划的求解;5.1.3有约束非线性规划的求解;1.求解有等式约束非线性规划的Lagrange乘数法;2.求解有约束非线性规划的罚函数法;5.1.4凸规划;2.凸函数的性质;3.函数凸性的判定;计算的Python程序如下:

#程序文件ex5_1.py

importnumpyasnp

importcvxpyascp

?

x=cp.Variable(2,pos=True)

obj=cp.Minimize(sum(x**2)-4*x[0]+4)

con=[-x[0]+x[1]-2=0,

x[0]**2-x[1]+1=0]

prob=cp.Problem(obj,con)

prob.solve(solver=CVXOPT)

print(最优值为:,round(prob.value,4))

print(最优解为:\n,np.round(x.value,4))

;4.库恩—塔克条件(简称K-T条件);;计算及画图的Python程序如下:

#程序文件ex5_2.py

importsympyassp

importpylabasplt

?

plt.rc(text,usetex=True)#使用LaTeX字体

plt.rc(font,size=14)

sp.var(x1,x2)#定义符号变量

y=(339-0.01*x1-0.003*x2)*x1+(399-0.004*x1-0.01*x2)*x2-(400000+195*x1+225*x2)

y=sp.simplify(y)#化简

dy1=y.diff(x1)#求关于x1的偏导

dy2=y.diff(x2)#求关于x2的偏导

s=sp.solve([dy1,dy2],[x1,x2])

x10=round(float(s[x1]))#取整

x20=round(float(s[x2]))

y0=y.subs({x1:x10,x2:x20})#符号函数代入数值;f=sp.lambdify(x1,x2,y,numpy)#符号函数转换为匿名函数

x=plt.linspace(0,10000,100)

X,Y=plt.meshgrid(x,x)#转换为网格数据

Z=f(X,Y)

ax=plt.subplot(121,projection=3d)#第一个子窗口三维画图

ax.plot_surface(X,Y,Z,cmap=viridis)

ax.set_xlabel($x_1$);ax.set_ylabel($x_2$)

plt.subplot(122)#激活第二个子窗口

contr=plt.contour(X,Y,Z,10)#10条等高线

plt.clabel(contr)#等高线标注

plt.ylabel($x_2$,rotation=0)

plt.xlabel($x_1$)

?

;sp.var(a,pos=True)#定义灵敏度分析的符号参数

y=(339-a*x1-0.003*x2)*x1+(399-0.004*x1-0.01*x2)*x2-(400000+195*x1+225*x2)

y=sp.simplify(y)#化简

dy1=y.diff(x1)#求关于x1的偏导

dy2=y.diff(x2)#求关于x2的偏导

s=sp.solve([dy1,dy2],[x1,x2])

sx1=s[x1];sx2=s[x2]#提取解分量

s1

您可能关注的文档

文档评论(0)

gcmguochunming + 关注
实名认证
内容提供者

高级工程师持证人

小小的人

领域认证该用户于2025年07月19日上传了高级工程师

1亿VIP精品文档

相关文档