Вы можете решить эту проблему, используя линейное программирование (LP), но проблема требует некоторой модификации, прежде чем вы сможете вставить ее в решатель LP.Задача LP в основном заключается в максимизации или минимизации функции с учетом некоторых ограничений.
Сначала разбейте задачу на две проблемы (поскольку LP не поддерживает два условия if
, которые у вас есть):
Constraints:
a + b + c >= 100
d + e + f >= 50
g + h >= 30
8b + 2e + 7h > 620
Linear function:
5 * 0.8a + 8 * 1.0b + 5c + 3 * 0.8d + 2 * 1.0e + 2f + 6 * 0.8g + 7 * 1.0h = w
И
Constraints:
a + b + c >= 100
d + e + f >= 50
g + h >= 30
d > 35
Linear function:
5 * 1.0a + 8 * 0.9b + 5c + 3 * 1.0d + 2 * 0.9e + 2f + 6 * 1.0g + 7 * 0.9h = w
После того, как вы запустите оба по отдельности с помощью решателя LP, решение получит значения a, b, c, d, e, f, g, h и w.Выберите меньшее значение w и соответствующие значения a, b, c, d, e, f, g, h.
Как это работает?
Два if
условияэффективно аналогичны другим перечисленным ограничениям, просто они влекут за собой разные значения x и y.Поскольку эти два условия являются взаимоисключающими (учитывая, что оба не могут быть выполнены, поскольку x и y, следовательно, будут иметь разные значения), вы можете разделить их на две отдельные задачи LP.В результате вы решаете проблемы LP индивидуально, и, следовательно, вы получите минимальное значение w.
Для решателя LP перейдите к статье Википедии о линейном программировании, как указано выше.Существуют такие инструменты, как Excel и некоторые другие, которые проще в использовании, но если вам нужна программа, то есть числовые языки, которые хороши в этом, или языки общего назначения, такие как C, которые могут сделать это с библиотекой, такой как glpk.
Надеюсь, это поможет!