代码,以验证是否可以在给定的斜率下从起始体积达到目标体积

时间:2019-02-06 10:57:23

标签: mathematical-optimization

编程问题。

我有一个初始体积(兆瓦),我需要在指定的时间内达到目标体积(兆瓦)。理想的解决方案是在两点之间生成一条直线,以计算所需的速率。但是,我们只能使用指定的斜率从起始费率转到目标费率:

  1. 从任何起始体积到弯管体积1的速率1-MW / min
  2. 肘部容积1-此时的容积
  3. 速率2-兆瓦/分钟,从弯管体积1到弯管体积2
  4. 肘部容积2-此时的容积
  5. 从弯管容积2到目标容积的速率3-MW / min

例如,我可能有以下内容:

  1. 速率1 = 10MW / min。
  2. 弯管容量1 = 100MW
  3. 速率2 = 5MW / min
  4. 弯管容量2 = 105MW
  5. 速率3 = 35MW / min

Exzample rates

这意味着我可以从100MW之前的任何容量开始,然后以10MW / min的速度达到100MW。然后,我可以以5MW / min的速度达到105MW。然后我可以以35MW / min的速度获得大于105MW的任何体积。

因此,如果起始量为75MW,目标量为800MW,时差为30分钟,则可以实现:

  1. 从目标容量750MW开始,我可以在19.9分钟内达到105MW:   体积增量= 800MW-105MW = 695MW   花费的时间= 695MW / 35(MW / min)= 19.9分钟
  2. 我可以在1分钟内从105MW达到100MW   体积增量= 105MW-100MW = 5MW   花费的时间= 5MW / 5(MW / min)= 1分钟
  3. 我可以在几分钟内从100MW达到75MW:   体积增量= 100MW-75MW = 25MW   花费的时间= 25MW / 10(MW / min)= 2.5分钟
  4. 总共花费的时间= 19.9分钟+1分钟+ 2.5分钟= 23.4分钟
  5. 因为23.4分钟<30分钟才有可能

我可以对以上步骤进行编程以验证以上内容,但是正在寻找一种有效的方法,而我可能会找不到它。

我在c#中编码的方式如下:

  1. 获取开始量和目标量。
  2. 如果肘部容积2> =起始容积,肘部容积2 <=目标容积,则通过肘部容积2:
    • 计算目标与肘部容积2之间的容积增量。除以比率3,得出T1
    • 计算肘部容积1和最大值(起始容积,肘部容积2)之间的容积增量。用比率2除以得到T2。
  3. 如果肘部体积1> =起始体积,肘部体积1 <=目标体积,则通过肘部1:
    • 计算起始和肘部容积1之间的容积变化量。除以比率1得到T3。

对T1,T2和T3求和,并确保距离起始量和目标量之间的时间少于该时间。

我相信这是可行的,但希望看看是否有更好的解决方案。

1 个答案:

答案 0 :(得分:0)

如果我从您的解释中正确看到,您将获得以下数据:

  • 目标量
  • 肘部容积2
  • 评分3
  • 达到目标数量的总时间

为清楚起见,我将遵循您在示例图片中所做的构想。

image

  • 您知道y 3 (目标量)
  • 您知道y 2 (肘关节容积2)
  • 您知道m 3 (比率3)
  • 您知道x 3 (总时间)

如果x 2 3 ,这就是您需要了解的所有信息。 如果是这样,您可以在给定的时间内达到目标音量。

因为

m 3 =(y 3 -y 2 )/(x 3 -x 2

<=>

m 3 (x 3 -x 2 )=(y 3 -y 2

<=>

(x 3 -x 2 )=(y 3 -y 2 )/ m 3

您只需要知道

(y 3 -y 2 )/ m 3 > 0

因为那样

(x 3 -x 2 )> 0

所以您只需要检查

(目标体积-肘部体积2)除以rate3大于零。