Код для проверки того, может ли целевой объем быть достигнут из начального объема с заданными темпами линейного изменения - PullRequest
0 голосов
/ 06 февраля 2019

Проблема программирования.

У меня есть начальный объем (в МВт), и мне нужно достичь целевого объема (в МВт) за указанное количество времени.Идеальным решением является создание линейной линии между точками для расчета требуемой скорости.Однако мы можем перейти только от начальной скорости к целевой скорости, используя указанные скорости изменения скорости:

  1. Скорость 1 - МВт / мин от любого начального объема до Объема локтя 1
  2. Объем локтя1 - объем в этой точке
  3. Скорость 2 - МВт / мин от объема локтя 1 до объема 2 локтя *
  4. Объем локтя 2 - объем в этой точке
  5. Скорость 3 - МВт/ мин. от локтевого тома 2 до целевого объема

Так что в качестве примера я мог бы получить следующее:

  1. Скорость 1 = 10 МВт / мин.
  2. Объем локтя 1 = 100 МВт
  3. Скорость 2 = 5 МВт / мин
  4. Объем локтя 2 = 105 МВт
  5. Скорость 3 = 35 МВт / мин

Частота выборки

Это означает, что я могу начинать с любого объема до 100 МВт и достигать 100 МВт при 10 МВт / мин.Я могу получить 105 МВт при 5 МВт / мин.Затем я могу получить любой объем, превышающий 105 МВт со скоростью 35 МВт / мин.

Так что, если начальный объем составляет 75 МВт, а целевой объем составляет 800 МВт с разницей во времени 30 минут, это достижимо:

  1. Начиная с целевого объема при 750 МВт, я могу получить 105 МВт за 19,9 минут: дельта объема = 800 МВт - 105 МВт = 695 МВт времени = 695 МВт / 35 (МВт / мин) = 19,9 минут
  2. Я могуполучить от 105 МВт до 100 МВт за 1 мин. дельта объема = 105 МВт - 100 МВт = 5 МВт времени = 5 МВт / 5 (МВт / мин) = 1 мин
  3. Я могу получить от 100 МВт до 75 МВт за минуты: дельта объема = 100 МВт- 75 МВт = 25 МВт времени = 25 МВт / 10 (МВт / мин) = 2,5 минуты
  4. Общее время = 19,9 минуты + 1 минута + 2,5 минуты = 23,4 минуты
  5. С 23,4 минуты <30 минуттогда это возможно </li>

Я могу запрограммировать вышеупомянутые шаги, чтобы проверить вышеупомянутое, но ищу эффективный способ, который я могу упустить.

Способ, которым я кодировал это в c #,следующим образом:

  1. Получить начальный и целевой тома.
  2. Если ЭльбТеперь объем 2> = начальный объем и объем локтя 2 <= целевой объем, затем проходящий через объем локтя 2: <ul>
  3. Рассчитать дельту объема между целевым объемом и объемом локтя 2. Разделить на коэффициент 3, чтобы получить T1
  4. Рассчитать дельту объема между объемом колена 1 и максимальным (начальный объем, объем колена 2).Разделите на коэффициент 2, чтобы получить T2.
  5. Если объем локтя 1> = начальный объем и объем локтя 1 <= целевой объем, то прохождение через колено 1: <ul>
  6. Расчет объемадельта между начальным и локтевым объемом 1. Разделите на коэффициент 1, чтобы получить T3.

Сумма T1, T2 и T3 и убедитесь, что между временем начала и целевого объема меньше времени.

Я верю, что это работает, но хочу посмотреть, есть ли лучшее решение там.

1 Ответ

0 голосов
/ 07 февраля 2019

Если я вижу это правильно из вашего объяснения, у вас есть следующие данные:

  • целевой объем
  • объем локтя 2
  • скорость 3
  • общее время достижения заданного объема

Чтобы было ясно, я буду следовать обозначению, которое я сделал на вашем примере изображения.

image

  • вы знаете y 3 (целевой объем)
  • вы знаете y 2 (объем локтя 2)
  • вы знаете, m 3 (оценка 3)
  • вы знаете, x 3 (общее время)

Это все, что вам нужно знатьвыяснить, если х 2 <х <sub>3 .Если это так, вы можете достичь целевого объема в данный момент времени.

С

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

<=>

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

<=>

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

вам просто нужно знать, если

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

потому что тогда

(x 3 - x 2 )> 0

Так что вам нужно только проверить, если

(целевой объем - объем локтя2), деленный на показатель3 больше нуля.

...