#constraints #linear-programming
Вопрос:
Писатель создает математические задачи для веб-сайта. Ей платят 5 долларов за словесную задачу и 2 доллара за алгебраическую задачу. В среднем ей требуется 4 минуты, чтобы создать словесную задачу, и 2 минуты, чтобы создать алгебраическую задачу. Ее босс хочет, чтобы она решала в общей сложности не менее 50 задач и имела больше алгебраических задач, чем словесных. Если у писательницы есть три часа, какую наибольшую прибыль она может получить?
Пожалуйста, исправьте мои ограничения, если они неверны.
4 минуты на создание задачи со словом и 2 минуты на создание алгебраической задачи. Если у писателя есть 180 минут. Ограничение 1 равно 4x 2y<=180
Ее босс хочет, чтобы она создала в общей сложности не менее 50 проблем. Ограничение 2 равно x<=50
и у них больше алгебраических задач, чем словесных. Ограничение 3 равно y> x>
Комментарии:
1. Вы можете найти ответ здесь: gauthmath.com/solution/…
Ответ №1:
Вам, вероятно, нужны эти ограничения:
#!/usr/bin/env python3
import cvxpy as cp
import numpy as np
word_count = cp.Variable()
algebraic_count = cp.Variable()
constraints = [
4*word_count 2*algebraic_count <= 180, # Time constraint
word_count algebraic_count >= 50, # Need at least 50 problems
algebraic_count >= word_count, # More algebraic problems then word problems
]
objective = cp.Maximize(5*word_count 2*algebraic_count)
prob = cp.Problem(objective, constraints)
optval = prob.solve()
print("Optimum profit", optval)
print("Word problem count", word_count.value)
print("Algebraic problem count", algebraic_count.value)
Дающий
Optimum profit 209.99999999414464
Word problem count 29.999999990727126
Algebraic problem count 30.000000020254507
Обратите внимание, что приведенные здесь числа достаточно близки к целым числам, чтобы мы могли поверить в их правильность. Однако в целом это не так. Если у вас есть значение, скажем, 29,5 для числа проблем со словом, это будет означать, что вам нужно либо заставить количество слов быть <=29
, либо >=30
попытаться получить целое значение.
В качестве альтернативы вы можете использовать режим целочисленного программирования, установив:
word_count = cp.Variable(integer=True)
algebraic_count = cp.Variable(integer=True)
что дает
Optimum profit 210.0
Word problem count 30.0
Algebraic problem count 30.0