Допустим, у вас есть два набора значений (a_old, b_old, c_old) и (a_new, b_new, c_new).Если вы хотите, чтобы их соотношения были одинаковыми (например, a_old: c_old совпадает с a_new: c_new, а c_old: b_old совпадает с c_new: b_new и т. Д.), То это то же самое, что сказать, что существует некотороеконстанта k такая, что a_new = k * a_old, b_new = k * b_old и c_new = k * c_old.
В вашем примере 65 * a_old + 74 * b_old + 12 * c_old = 249. Если вы умножаетеобе стороны этого уравнения на k, вы получите 65 (k * a_old) + 74 (k * b_old) + 12 (k * c_old) = 249 * k.Это то же самое, что '65 (a_new) + 74 (b_new) + 12 (c_new) = 249k '.
Вы хотите, чтобы 249 * k было равно 600. Следовательно, k = 600/249 = примерно2,4096.Затем вы можете использовать это значение k вместе с a_old, b_old, c_old, чтобы найти значения a_new, b_new, c_new.Помните, что новые значения просто в k раз превышают старые значения.
Вот функция, которая возвращает набор масштабированных значений параметров:
def optimize(a,b,c, opt_res):
res = 65 * a + 74 * b + 12 * c
k = opt_res/res
new_vals = [parameter * k for parameter in [a,b,c]]
return new_vals
print(optimize(1,2,3,600.0))
## output: [2.4096385542168677, 4.819277108433735, 7.2289156626506035]
Примечание. Я использовал «600.0», а не «600»,Это заставляет Python использовать float вместо того, чтобы делать все с усеченными целыми числами.