数学建模-最优化模型-单变量最优化

数学建模-最优化模型-单变量最优化如果模型的初始数据和假设没有与实际相差太远 则售出的最佳时间应该由令 P 0 得到 计算后有 p w pw 0 45

欢迎大家来到IT世界,在知识的湖畔探索吧!

引言

解决最优化问题是数学的一些最为常见的应用,无论我们进行何种工作,我们总是希望达到最好的结果,而使不好的方面或消耗等降到最低。这其中有一个共同的数学模型:

有一个或多个看可以控制的变量,它们通常受一些实际中的限制,通过对这些变量的控制,从而使某个目标达到最优。

最优化模型正是要给定问题的约束条件。确定受约束的可控变量的取值,以达到最有结果。

五步方法

  1. 提出问题: 三个阶段(变量、假设、目标)
  2. 选择建模方法
  3. 推导模型的数学表达式
  4. 求解模型
  5. 回答问题

举例

一头猪重200磅,每天增重5磅,饲养每天需要花费45美分,猪的市场价格为每磅65美分,但每天下降1%,求出售猪的最佳时间。

# %% # 第一步提出问题 # 1美元=100美分 # 全部的变量 # 养猪的天数 # 猪的重量 # 猪的价格 # 饲养天数的花费 # 售出猪的收益 # 净收益 # 假设 # 从现在到出售猪期间经历的天数 days = 0 # 猪的重量 def pigWeight(days): return 200 + 5*days # 养猪期间的花费 def cost(days): return days * 0.45 # 猪的市场价格 def unitPrice(days): return 0.65 - 0.01*days # 售出生猪所获得的收益 def revenue(days): return pigWeight(days) * unitPrice(days) # 净收益 def profit(days): return revenue(days) - cost(days) # 目标 # 求 净收益 的最大值 # %% # 第二步是选择建模方法 # 很明显真正的变量是养猪的天数,所以是一个单边量优化问题 # %% # 推导模型 # %% # 求解模型 import matplotlib.pyplot as plt import numpy as np days = np.arange(0, 15, 1) P = profit(days) plt.figure() plt.scatter(days, P) plt.show() # %% # 回答问题 # 所以在第8天得到最大净收益 print("最大净收益是: %f, 在第8天" % profit(8)) # %%

欢迎大家来到IT世界,在知识的湖畔探索吧!

数学建模-最优化模型-单变量最优化



欢迎大家来到IT世界,在知识的湖畔探索吧!

灵敏性分析

我们很少能保证这些假设都是完全正确的。因此我们需要考虑所得结果对每一条假设的敏感程度。这种灵敏性分析是数学建模中的一个重要方面。具体内容与所用的建模方法有关。

数据是由测量、观察有时甚至完全是由猜测得到的,因此我们要考虑数据不准确的可能性。

我们知道有些数据要比其他的可靠性高的多,生猪现在的重量、猪现在的价格,每天的饲养花费都很容易测量,而且有相当大的确定性。猪的生长速率则不那么确定,而价格的下架速率则确定性更低。

记r为价格下降的速率。我们前面假设r=1%美元/天。现在我们假设r的实际值是不同的。下面是对几个不同的r的求解结果

欢迎大家来到IT世界,在知识的湖畔探索吧!# %% # 第一步提出问题 # 1美元=100美分 # 全部的变量 # 养猪的天数 # 猪的重量 # 猪的价格 # 饲养天数的花费 # 售出猪的收益 # 净收益 # 假设 # 从现在到出售猪期间经历的天数 days = 0 # 猪的重量 def pigWeight(days): return 200 + 5*days # 养猪期间的花费 def cost(days): return days * 0.45 # 猪的市场价格 def unitPrice(days,r): return 0.65 - r * days # 售出生猪所获得的收益 def revenue(days, r): return pigWeight(days) * unitPrice(days, r) # 净收益 def profit(days, r=0.01): return revenue(days, r) - cost(days) # 目标 # 求 净收益 的最大值 # %% # 第二步是选择建模方法 # 很明显真正的变量是养猪的天数,所以是一个单边量优化问题 # %% # 推导模型 # %% # 求解模型 import matplotlib.pyplot as plt import numpy as np days = np.arange(0, 20, 1) P1 = profit(days, 0.008) P2 = profit(days, 0.009) P3 = profit(days, 0.01) P4 = profit(days, 0.011) P5 = profit(days, 0.012) plt.figure() plt.scatter(days, P1, color='red', label='r=0.008') plt.scatter(days, P2, color='green', label='r=0.009') plt.scatter(days, P3, color='blue', label='r=0.01') plt.scatter(days, P4, color='pink', label='r=0.011') plt.scatter(days, P5, color='black', label='r=0.012') plt.legend() # 显示图例 plt.show() # %%
数学建模-最优化模型-单变量最优化

所以得到结果:

数学建模-最优化模型-单变量最优化

我们可以看到售猪的最优时间对参数r既价格的下降率是很敏感的。


对灵敏性更系统的分析是将r作为未知的参数,仍按前面的步骤求解

y = f(x) = (0.65 – rx)(200+5x) – 0.45x

f'(x) = -2(25rx+500r-7)/5

令f'(x) = 0 则 x = (7-500r)/25r

这样只要 x >=0, 则 0 < x <= 0.014

很明显当x > 0.014后x < 0, 所以最佳的售猪时间是x=0。


猪的生长率g同样不很确定,

# %% # 第一步提出问题 # 1美元=100美分 # 全部的变量 # 养猪的天数 # 猪的重量 # 猪的价格 # 饲养天数的花费 # 售出猪的收益 # 净收益 # 假设 # 从现在到出售猪期间经历的天数 days = 0 # 猪的重量 def pigWeight(days, g): return 200 + g * days # 养猪期间的花费 def cost(days): return days * 0.45 # 猪的市场价格 def unitPrice(days,r): return 0.65 - r*days # 售出生猪所获得的收益 def revenue(days, r, g): return pigWeight(days, g) * unitPrice(days, r) # 净收益 def profit(days, r=0.01, g = 5): return revenue(days, r, g) - cost(days) # 目标 # 求 净收益 的最大值 # %% # 第二步是选择建模方法 # 很明显真正的变量是养猪的天数,所以是一个单边量优化问题 # %% # 推导模型 # %% # 求解模型 import matplotlib.pyplot as plt import numpy as np days = np.arange(0, 20, 1) P1 = profit(days, r=0.01, g=3) P2 = profit(days, r=0.01, g=4) P3 = profit(days, r=0.01, g=5) P4 = profit(days, r=0.01, g=6) P5 = profit(days, r=0.01, g=7) plt.figure() plt.scatter(days, P1, color='red', label='g=3') plt.scatter(days, P2, color='green', label='g=4') plt.scatter(days, P3, color='blue', label='g=5') plt.scatter(days, P4, color='pink', label='g=6') plt.scatter(days, P5, color='black', label='g=7') plt.legend() # 显示图例 plt.show()
数学建模-最优化模型-单变量最优化

公式 f(x) = (0.65-0.01x)(200+gx) – 0.45

f'(x) = -[2gx + 5(49-13g)]/100

令f'(x) = 0 则 x = 5(13g-49)/2g,得出图像

数学建模-最优化模型-单变量最优化


将灵敏性数据表示成相对改变量或百分比改变的形式,要比绝对改变量的形式更自然也更适用。

数学建模-最优化模型-单变量最优化

我们称这个极限为x对r的灵敏性,记为S(x, r)。

所在在售猪问题中

dx/dr = -7 / 25r^2

所以当r=0.01时,S(x, r) = -7/2, 即弱r增加了2%,则x下降了7%

同理当g=5时,我们得到S(x, g) = 3.0625,所以猪的生长率增加1%,会导致多等待3%的时间再将猪出售。


我们需要选择那些有较大不确定性的参数进行灵敏性分析。对灵敏性系数的解释还要依赖于参数的不确定程度。原始问题中数据的不确定性程度会影响我们对答案的自信度。

在这个售猪问题中,我们通常认为猪的生长率g比价格的下降率r更靠谱。如果我们观察了猪或其他类似动物在过去的生长情况,g有25%的误差会是很不寻常的,但对r的估计有25%的误差则不足为奇。


一个数学模型称为有稳健性是指即这么模型不完全精确,由其导出的结果仍是正确的。在实际问题中,我们不会有绝对精确的信息,即使能够建立一个完美的精确的模型,我们也可能采用较简单和易于处理的近似方法。

一个好的数学模型有稳健性,是指虽然它给出的答案并不是完全精确的,但足够近似从而可以在实际问题中应用。

P = 净收益(美元)

p = 猪的价格(美元/磅)

w = 猪的重量(磅)

t = 时间(天)

让我们来考察售猪问题中的假设,其基本方程

P = pw – 0.45t

如果模型的初始数据和假设没有与实际相差太远,则售出的最佳时间应该由令P‘ = 0得到。

计算后有 p’w + pw’ = 0.45

其中p’w + pw’项代表猪价的增长率。

模型告诉我们,只要猪价比饲养的费用增长快,就应暂不卖出,继续饲养。

此外,猪的价格改变包括两项:p’w和pw’。

第一项p’w代表因价格下架而损失的价格,第二项pw’代表由于猪增重而增加的价值。

显示中需要使用实际的数值,用模型重新计算。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/108271.html

(0)
上一篇 1天前
下一篇 1天前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信