Python: минимизировать несколько функций с несколькими переменными - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь свести к минимуму 2 функции с 2 переменными одновременно. У меня есть набор данных и 2 уравнения, такие как:

B1 = 4
P1 = 6
G1 = 2
E1 = 3

F1 = B - G - E = -1
F2 = P - G - E = 1

Учитывая новые B2 = 5 и P2 = 6 Я хотел бы вычислить переменные G2, E2 так, чтобы разница между старыми значениями F1 =-1 и F2 = 1, а новые значения F3 и F4 сведены к минимуму:

B2 = 5
P2 = 6
G2 = ?
E2 = ?

F3 = B2 - G2 - E2 ---> as close as possible to F1
F4 = P2 - G2 - E2 ---> as close as possible to F2

Я пытался:

   def diff(param):
        G2, E2 = param  
        return abs(B1 - G2 - E2 - F1)

    x0 = [2,2]
    res = minimize(diff, x0) 

Это правильно разрешает минимизацию, которая дает F3 = F1 = -1, но не решает мое намерение также минимизировать разницу (F4 - F2). Вы знаете, как включить вторую проблему минимизации?

Заранее спасибо

1 Ответ

0 голосов
/ 01 ноября 2019

Я не уверен, что мой подход слишком наивен (возможно, если честно), но, учитывая, что вы хотите минимизировать две разницы, то есть каждая разница должна стремиться к нулю, тогда почему бы вам не попробоватьминимизировать сумму различий? Эта сумма также должна стремиться к нулю. Это будет выглядеть так:

from scipy.optimize import minimize


def diff(x):
    G2, E2 = x
    return (abs(B2 - G2 - E2 - F1 + P2 - G2 - E2 - F2))


B1 = 4
P1 = 6
G1 = 2
E1 = 3
F1 = B1 - G1 - E1
F2 = P1 - G1 - E1
B2 = 5
P2 = 6
res = minimize(diff, x0=(1, 1))

res.x возвращает [2.75, 2.75], что дает F3 = -0.5, F4 = 0.5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...