I'm a little new to optimization in Python, particularly on Scipy. If I only have one function such as this:
def prod(x):
return -x[0] * x[1]
Then I can easily know how to do maximization through:
linear_constraint = LinearConstraint([[1,1]], [20], [20])
x0 = np.array([15,5])
result = minimize(prod, x0, constraints=linear_constraint)
print(result['x'])
This is basically maximizing x0 * x1 given the constraint that x0 + x1 = 20. The answer here is array([10., 10.]).
So now, I wish to do something more sophisticated and not just optimizing one function. Suppose I would like to optimize multiple functions. Say I have this matrix P of size n x 3:
A B C
3 2 7
6 3 4
8 1 5
...
Is there a way to optimize (minimize) P[i] * x, where * here is a dot product for all i = 1..n? In short, I wish to optimize:
3*x[0] + 2*x[1] + 7*x[2]
6*x[0] + 3*x[1] + 4*x[2]
8*x[0] + 1*x[1] + 5*x[2]
...
and under the constraint that x[0] + x[1] + x[2] = 1. Anyone knows how to implement this correctly on Python (I'm using Scipy by the way)? I'm still not sure where to begin. Thanks in advance!