Running optimization using Scipy and Pandas packages
I have written the code

import pandas as pd
import numpy as np
from scipy.optimize import minimize
pd.set_option('display.mpl_style', 'default')
"""Read the input file into the dataframe""" """T1 file contains the decision variables, corresponding investments and their upper and lower bounds"""

df = pd.DataFrame.from_csv('C:\Users\prashant.mudgal\Downloads\T1.csv')
"""T2 file contains the parameters for the decision variables, note that there can be 2 or more entries for the same decison variable""" """ Our objective func will be prep from T2 file , it will be of the form sum (all DV in params file) (a_(b + c \* DV_name)_\* power) """

df2 = pd.DataFrame.from_csv('C:\Users\prashant.mudgal\Downloads\T2.csv')
"""subset of DV"""

decisionVars= df2['DV']
"""subset for coeff """

coeff = df2['coef']
"""subset for power"""

power = df2['p']

x0 = df['Hist_Inv']

bnds = df[['LB','UB']].values

def objFunc(decisionVars,sign=1.0) :
return sign_(sum(coeff.values[0:] *(df2['weight_f'].values[0:] + df2['weight_v'].values[0:] \* decisionVars[0:])_*power.values[0:]))
"""bounds for the decision variables have been hardcoded """ """ The bounds have been hardcoded and it will be cumbersome if there are thousands of Decision vars """ """ The bounds have been specified in T1.csv file, we want to ream them via the file """

""" Though we are not using constraints as of now, but is it correct form""" """ How to form the constraints for say x + y < 5 ? """ cons = ({'type': 'ineq', 'fun': lambda x: decisionVars[1] - 2 \* decisionVars[1] + 2}, {'type': 'ineq', 'fun': lambda x: -decisionVars[2] - 2 \* decisionVars[1] + 6}, {'type': 'ineq', 'fun': lambda x: -decisionVars[0] + 2 \* decisionVars[1] + 2})

""" the second parameter is the initial values that needs to be optimized""" """ Now, the number of distinct decision vars in the files are 3 in numbers while the total number of decision vars are 12 in number . if we specify x0 as the dataframe of investment (3 in number in the T1 file) , then it gives error that ::: operands could not be broadcast together with shapes (12,) (3,)"""

res = minimize(objFunc, x0,args=(-1.0,),method='SLSQP',bounds = bnds,
           options={'disp': True})
"""Print the results"""

print (res)
T1.csv is like DV LB UB Hist_Inv X1 0.7 1.3 28462739.43 X2 0.7 1.3 177407.18 X3 0.7 1.3 1423271.12

T2.csv is

Count   DV  weight_f    weight_v    p   coef
1   X1  2.310281831 3.661156016 0.5 1828.105881
2   X1  0.693084549 2.20503016  0.5 1460.686147
3   X1  0.207925365 2.030522789 0.5 1436.277144
4   X1  0   5.248353307 0.8 1050.493355
5   X1  0   1.591805116 0.8 983.9964128
6   X1  0   1.933056056 0.8 459.9371809
7   X2  7.322516444 138 0.5 387.4659072
8   X2  3.661258222 139 0.5 606.8684771
9   X2  1.830629111 176.5   0.5 358.8902965
10  X3  164294.4758 77024   0.2 282.0477107
11  X3  98576.68545 122261.4    0.2 345.9217482
12  X3  59146.01127 166242.84   0.2 364.9587162
I create my obj function using vars in T2, there are a lot of vars which are repeated in T2.csv on running optimization I am getting the error operands could not be broadcast together with shapes (12,) (3,) because it is taking all the variables in T2 as different. How should I avoid this issue? X1, X2 AND X3 are the only three vars here.
