Shayan
Shayan

Reputation: 6375

Gekko seems to ignore the single equation

I've been using Gekko for the last three years for optimization purposes. As a matter of fact, I'm using Gekko version 1.0.4. Recently, I've been trying to solve an ESG-MVP problem developed by (Vo, He et al. 2019):
enter image description here
Considering sum(wesg) should be equal to 1 and 0 ≤ wesg_i ≤ 1 for iε[0, 1, 2,..., 23]. In this model, I'm trying to find the best values of wesg_i for the model above. Hence, according to the information provided, I have to find the value of 24 variables through an optimization model. My code is available for you to test on your computer with all the vital data needed.

Libraries

from gekko import GEKKO
import numpy as np
import pandas as pd

Data Section

Make sure copy it all.

esg_scores_df = pd.DataFrame({'Score 2019': {'MSFT': 7,'PEP': 7,'TSLA': 4,'AMZN': 6,'LKQ': 3,'ABMD': 3,'MSI': 10,'PH': 8,'NKE': 6,'TM': 7,'EOG': 7,'GOOGL': 5,'NFLX': 4,'GS': 6,'EQIX': 9,'EA': 7,'AAP': 6,'TEL': 9,'DG': 6,'EXR': 5,'MDLZ': 6,'FIS': 8,'CRL': 8,'RCL': 9},
 'Score 2020': {'MSFT': 6,'PEP': 11,'TSLA': 4,'AMZN': 6,'LKQ': 4,'ABMD': 4,'MSI': 8,'PH': 8,'NKE': 6,'TM': 7,'EOG': 7,'GOOGL': 5,'NFLX': 3,'GS': 6,'EQIX': 9,'EA': 6,'AAP': 7,'TEL': 9,'DG': 6,'EXR': 4,'MDLZ': 6,'FIS': 8,'CRL': 8,'RCL': 7}})


predicted_return_dataframe = pd.DataFrame({'MSFT': 1.0982472257593677e-15,'PEP': 4.567069595849647e-09,'TSLA': 7.439258841202596e-10,'AMZN': 3.176883309676764e-07,'LKQ': 4.825709334830293e-05,'ABMD': 2.0608058642685837e-05,'MSI': -3.1789250961959136e-12,'PH': -2.257237871892785e-07,'NKE': -4.737530217609426e-07,'TM': 9.951932427172896e-07,'EOG': 1.184074639824261e-08,'GOOGL': -1.7027206923083418e-10,'NFLX': 2.948344729885545e-05,'GS': 1.458862302453713e-07,'EQIX': 4.620207503091301e-07,'EA': -1.297137640100873e-06,'AAP': -3.493153382990658e-07,'TEL': 8.202463568291799e-08,'DG': 2.743802312024829e-05,'EXR': 1.971994818465128e-11,'MDLZ': 1.578772827915881e-08,'FIS': 1.3314663987166631e-08,'CRL': 4.112083587242872e-05,'RCL': -1.470829206425942e-09} , index = [0])


r = pd.DataFrame({'MSFT': -0.029838842874655123,'PEP': -0.012265555866403165,'TSLA': -0.053599428210690636,'AMZN': -0.02614876342440773,'LKQ': -0.026658034482507052,'ABMD': -0.017274321994365294,'MSI': -0.018624198080929168,'PH': -0.02871952268633362,'NKE': -0.028820168231794074,'TM': -0.011208781085200492,'EOG': -0.04606883798249617,'GOOGL': -0.027983366801701926,'NFLX': -0.0070609860042608165,'GS': -0.02429261616692462,'EQIX': -0.015181566244607758,'EA': -0.012009295653284258,'AAP': -0.011979871239295382,'TEL': -0.021782414925879602,'DG': -0.009820085124020328,'EXR': -0.012233190959318829,'MDLZ': -0.015917631061436933,'FIS': -0.023877815976094417,'CRL': -0.020169902356185498,'RCL': -0.06831607178882856} , index = [0])

sigma = pd.DataFrame(np.array([[ 1.02188994e-04,  3.16399586e-05,  8.54243667e-05,
         7.14148287e-05,  3.55313650e-05,  5.44796564e-05,
         3.39128448e-05,  6.65003271e-05,  5.42932808e-05,
         2.29333906e-05,  4.26407605e-05,  7.92791756e-05,
         9.28910574e-05,  6.36770764e-05,  3.75024646e-05,
         5.13720672e-05,  1.33646720e-05,  6.21865710e-05,
         4.72888751e-05,  2.35546749e-06,  2.49700413e-05,
         6.74503236e-05,  7.08948785e-05,  5.55096135e-05],
       [ 3.16399586e-05,  6.47824823e-05, -2.57461009e-05,
         1.81931187e-05,  2.11795049e-05,  1.01708683e-05,
         3.33739243e-05,  1.23893822e-05,  2.74825418e-05,
         1.35954411e-05,  2.37108310e-06,  2.34208728e-05,
         1.96972793e-05,  1.09335123e-05,  4.26042775e-05,
         2.76849308e-05,  6.01821651e-06,  8.04387109e-06,
         3.10892437e-05,  2.79970364e-05,  3.70572613e-05,
         3.08215527e-05,  2.57244480e-05,  8.72002781e-06],
       [ 8.54243667e-05, -2.57461009e-05,  8.84138653e-04,
         6.16478906e-05, -1.78063009e-05,  3.62712388e-05,
        -6.15200573e-05,  8.63597848e-05,  2.12571109e-05,
         3.21749681e-05,  6.54693912e-05,  7.95298035e-05,
         1.53917874e-04,  8.06306277e-05, -5.27893372e-06,
         2.60899474e-05,  4.29017379e-05,  6.13689353e-05,
         2.30097086e-06, -4.45963115e-05, -2.83669072e-06,
         2.95395217e-05,  4.53889239e-05,  3.11615533e-05],
       [ 7.14148287e-05,  1.81931187e-05,  6.16478906e-05,
         1.19357840e-04,  5.48763301e-05,  5.55161292e-05,
         2.77288469e-05,  6.25231790e-05,  5.19494452e-05,
         1.93193913e-05,  4.28946368e-05,  7.00210371e-05,
         9.92756795e-05,  6.54630027e-05,  1.73935405e-05,
         4.46819063e-05,  2.94199398e-05,  5.76749375e-05,
         3.75634244e-05, -5.53847280e-06,  9.72193169e-06,
         4.42756733e-05,  4.21469376e-05,  4.35344231e-05],
       [ 3.55313650e-05,  2.11795049e-05, -1.78063009e-05,
         5.48763301e-05,  3.49607174e-04,  1.58156275e-04,
        -1.64565378e-05,  5.95602984e-05,  3.36138721e-05,
         2.25095973e-05,  4.90144491e-05,  5.60207136e-05,
         3.73119885e-05,  8.65010497e-05, -1.68774498e-05,
         1.06928038e-05,  3.53732120e-05,  8.46071106e-05,
         3.89200328e-05, -1.10740797e-05,  4.20238479e-06,
         2.07371361e-05,  2.27640364e-05,  7.39017715e-05],
       [ 5.44796564e-05,  1.01708683e-05,  3.62712388e-05,
         5.55161292e-05,  1.58156275e-04,  1.12266763e-03,
         2.49786917e-05,  5.60053839e-05, -2.57686022e-05,
         3.00855419e-05,  2.09079416e-04,  1.21797841e-04,
         3.80689080e-06,  1.17305259e-04, -4.95192897e-05,
         5.56059321e-05,  2.87765760e-06,  1.13640096e-04,
        -2.73690072e-05,  2.17458024e-05, -1.24009254e-05,
         6.11287657e-05,  1.12849096e-04,  1.17234141e-04],
       [ 3.39128448e-05,  3.33739243e-05, -6.15200573e-05,
         2.77288469e-05, -1.64565378e-05,  2.49786917e-05,
         1.84271573e-04, -2.99455473e-06,  3.56885701e-05,
         1.53451236e-05,  3.20222217e-06,  3.00619247e-05,
         5.17902613e-05,  1.69851832e-05,  7.75007583e-05,
         7.49839347e-06, -3.78485373e-05, -1.28942631e-05,
         4.36657573e-05,  3.97590833e-05,  4.04704969e-05,
         4.05201790e-05,  4.01384618e-05,  4.82818631e-06],
       [ 6.65003271e-05,  1.23893822e-05,  8.63597848e-05,
         6.25231790e-05,  5.95602984e-05,  5.60053839e-05,
        -2.99455473e-06,  2.86568704e-04,  6.55278686e-05,
         4.08938883e-05,  1.18822482e-04,  9.32577766e-05,
         7.92498191e-05,  1.38967662e-04, -1.64128182e-05,
         4.16393158e-05,  1.06300676e-04,  1.31672888e-04,
         6.64839109e-05, -5.14108669e-05, -1.03044572e-05,
         1.59107041e-05,  7.65457600e-05,  1.31611693e-04],
       [ 5.42932808e-05,  2.74825418e-05,  2.12571109e-05,
         5.19494452e-05,  3.36138721e-05, -2.57686022e-05,
         3.56885701e-05,  6.55278686e-05,  1.36374334e-04,
         1.36781102e-05,  2.38544176e-05,  5.90104054e-05,
         6.20754315e-05,  5.84082445e-05,  3.96422393e-05,
         2.96064418e-05,  5.54456912e-05,  5.69396332e-05,
         7.28867485e-05,  7.92870807e-06,  3.79528145e-05,
         3.38036564e-05,  3.47015652e-05,  3.86545249e-05],
       [ 2.29333906e-05,  1.35954411e-05,  3.21749681e-05,
         1.93193913e-05,  2.25095973e-05,  3.00855419e-05,
         1.53451236e-05,  4.08938883e-05,  1.36781102e-05,
         5.30619573e-05,  4.42693706e-05,  2.92937393e-05,
         1.15184525e-05,  3.04141154e-05,  1.11981894e-06,
         1.29388215e-05,  1.41913521e-05,  2.37704063e-05,
         1.27983719e-05, -3.53963791e-06,  5.41505031e-06,
         1.21874870e-05,  2.04099948e-05,  2.89151466e-05],
       [ 4.26407605e-05,  2.37108310e-06,  6.54693912e-05,
         4.28946368e-05,  4.90144491e-05,  2.09079416e-04,
         3.20222217e-06,  1.18822482e-04,  2.38544176e-05,
         4.42693706e-05,  5.01946804e-04,  7.79572195e-05,
         7.61563242e-05,  1.31597522e-04, -2.43789107e-05,
         6.77962026e-05,  5.39745318e-05,  9.05223133e-05,
        -1.88433584e-06, -1.63784490e-05, -1.04001201e-05,
         1.79450881e-05,  5.33951974e-05,  1.07102393e-04],
       [ 7.92791756e-05,  2.34208728e-05,  7.95298035e-05,
         7.00210371e-05,  5.60207136e-05,  1.21797841e-04,
         3.00619247e-05,  9.32577766e-05,  5.90104054e-05,
         2.92937393e-05,  7.79572195e-05,  1.10688236e-04,
         8.13294795e-05,  8.72981821e-05,  2.13737337e-05,
         4.33439061e-05,  3.06090710e-05,  7.60853329e-05,
         4.44363057e-05,  3.33458671e-06,  1.60908360e-05,
         4.09067616e-05,  5.72051871e-05,  6.05239478e-05],
       [ 9.28910574e-05,  1.96972793e-05,  1.53917874e-04,
         9.92756795e-05,  3.73119885e-05,  3.80689080e-06,
         5.17902613e-05,  7.92498191e-05,  6.20754315e-05,
         1.15184525e-05,  7.61563242e-05,  8.13294795e-05,
         3.77348891e-04,  8.99709029e-05,  2.58732673e-05,
         8.24015922e-05,  2.77333081e-05,  4.74146019e-05,
         3.76467363e-05, -5.60031564e-06,  2.25653918e-05,
         6.22679966e-05,  3.92394407e-05,  6.47067147e-05],
       [ 6.36770764e-05,  1.09335123e-05,  8.06306277e-05,
         6.54630027e-05,  8.65010497e-05,  1.17305259e-04,
         1.69851832e-05,  1.38967662e-04,  5.84082445e-05,
         3.04141154e-05,  1.31597522e-04,  8.72981821e-05,
         8.99709029e-05,  1.54802097e-04, -1.57072336e-05,
         3.58129141e-05,  5.52667399e-05,  1.02065825e-04,
         4.96942712e-05, -2.44193897e-05, -5.66188177e-06,
         2.35884764e-05,  5.15584350e-05,  9.98376706e-05],
       [ 3.75024646e-05,  4.26042775e-05, -5.27893372e-06,
         1.73935405e-05, -1.68774498e-05, -4.95192897e-05,
         7.75007583e-05, -1.64128182e-05,  3.96422393e-05,
         1.11981894e-06, -2.43789107e-05,  2.13737337e-05,
         2.58732673e-05, -1.57072336e-05,  1.54605175e-04,
         1.07085192e-05, -1.14274871e-05, -1.26204468e-05,
         2.50810750e-05,  5.60340845e-05,  4.60520336e-05,
         4.29696767e-05,  5.33004299e-05, -1.56063893e-05],
       [ 5.13720672e-05,  2.76849308e-05,  2.60899474e-05,
         4.46819063e-05,  1.06928038e-05,  5.56059321e-05,
         7.49839347e-06,  4.16393158e-05,  2.96064418e-05,
         1.29388215e-05,  6.77962026e-05,  4.33439061e-05,
         8.24015922e-05,  3.58129141e-05,  1.07085192e-05,
         1.32544808e-04,  3.15561503e-05,  3.62681876e-05,
         1.76503394e-05,  1.90982407e-07,  1.02992114e-05,
         2.81341342e-05,  2.81970597e-05,  3.94413355e-05],
       [ 1.33646720e-05,  6.01821651e-06,  4.29017379e-05,
         2.94199398e-05,  3.53732120e-05,  2.87765760e-06,
        -3.78485373e-05,  1.06300676e-04,  5.54456912e-05,
         1.41913521e-05,  5.39745318e-05,  3.06090710e-05,
         2.77333081e-05,  5.52667399e-05, -1.14274871e-05,
         3.15561503e-05,  2.71861487e-04,  6.04272650e-05,
         3.55256428e-05, -2.37123843e-05, -1.99844011e-05,
        -2.02943319e-07, -4.12746174e-07,  6.80701129e-05],
       [ 6.21865710e-05,  8.04387109e-06,  6.13689353e-05,
         5.76749375e-05,  8.46071106e-05,  1.13640096e-04,
        -1.28942631e-05,  1.31672888e-04,  5.69396332e-05,
         2.37704063e-05,  9.05223133e-05,  7.60853329e-05,
         4.74146019e-05,  1.02065825e-04, -1.26204468e-05,
         3.62681876e-05,  6.04272650e-05,  1.67171047e-04,
         5.06392219e-05, -1.02673299e-05,  1.64715372e-05,
         2.50897861e-05,  5.81836032e-05,  1.00294572e-04],
       [ 4.72888751e-05,  3.10892437e-05,  2.30097086e-06,
         3.75634244e-05,  3.89200328e-05, -2.73690072e-05,
         4.36657573e-05,  6.64839109e-05,  7.28867485e-05,
         1.27983719e-05, -1.88433584e-06,  4.44363057e-05,
         3.76467363e-05,  4.96942712e-05,  2.50810750e-05,
         1.76503394e-05,  3.55256428e-05,  5.06392219e-05,
         1.99771178e-04,  4.70710752e-06,  3.76160380e-05,
         2.30014580e-05,  3.12554634e-05,  5.94948441e-06],
       [ 2.35546749e-06,  2.79970364e-05, -4.45963115e-05,
        -5.53847280e-06, -1.10740797e-05,  2.17458024e-05,
         3.97590833e-05, -5.14108669e-05,  7.92870807e-06,
        -3.53963791e-06, -1.63784490e-05,  3.33458671e-06,
        -5.60031564e-06, -2.44193897e-05,  5.60340845e-05,
         1.90982407e-07, -2.37123843e-05, -1.02673299e-05,
         4.70710752e-06,  8.86508330e-05,  4.02039134e-05,
         2.39025489e-05, -5.94660474e-06, -1.92301274e-05],
       [ 2.49700413e-05,  3.70572613e-05, -2.83669072e-06,
         9.72193169e-06,  4.20238479e-06, -1.24009254e-05,
         4.04704969e-05, -1.03044572e-05,  3.79528145e-05,
         5.41505031e-06, -1.04001201e-05,  1.60908360e-05,
         2.25653918e-05, -5.66188177e-06,  4.60520336e-05,
         1.02992114e-05, -1.99844011e-05,  1.64715372e-05,
         3.76160380e-05,  4.02039134e-05,  8.23927778e-05,
         3.21948208e-05,  3.50482953e-05, -1.97971783e-07],
       [ 6.74503236e-05,  3.08215527e-05,  2.95395217e-05,
         4.42756733e-05,  2.07371361e-05,  6.11287657e-05,
         4.05201790e-05,  1.59107041e-05,  3.38036564e-05,
         1.21874870e-05,  1.79450881e-05,  4.09067616e-05,
         6.22679966e-05,  2.35884764e-05,  4.29696767e-05,
         2.81341342e-05, -2.02943319e-07,  2.50897861e-05,
         2.30014580e-05,  2.39025489e-05,  3.21948208e-05,
         1.20680211e-04,  5.96710279e-05,  3.14411495e-05],
       [ 7.08948785e-05,  2.57244480e-05,  4.53889239e-05,
         4.21469376e-05,  2.27640364e-05,  1.12849096e-04,
         4.01384618e-05,  7.65457600e-05,  3.47015652e-05,
         2.04099948e-05,  5.33951974e-05,  5.72051871e-05,
         3.92394407e-05,  5.15584350e-05,  5.33004299e-05,
         2.81970597e-05, -4.12746174e-07,  5.81836032e-05,
         3.12554634e-05, -5.94660474e-06,  3.50482953e-05,
         5.96710279e-05,  1.65974972e-04,  5.42453625e-05],
       [ 5.55096135e-05,  8.72002781e-06,  3.11615533e-05,
         4.35344231e-05,  7.39017715e-05,  1.17234141e-04,
         4.82818631e-06,  1.31611693e-04,  3.86545249e-05,
         2.89151466e-05,  1.07102393e-04,  6.05239478e-05,
         6.47067147e-05,  9.98376706e-05, -1.56063893e-05,
         3.94413355e-05,  6.80701129e-05,  1.00294572e-04,
         5.94948441e-06, -1.92301274e-05, -1.97971783e-07,
         3.14411495e-05,  5.42453625e-05,  1.92061080e-04]]))


sigma_bar = pd.DataFrame(np.array([[ 1.26820873e-09,  9.99357360e-01,  9.96834344e-01,
         9.99572167e-01,  9.42281243e-01,  9.97900189e-01,
         9.99540337e-01,  9.98601652e-01,  9.99273813e-01,
         9.97018616e-01, -9.73801139e-01,  9.99572102e-01,
         9.99493833e-01,  9.98516049e-01,  9.99016459e-01,
         9.99032878e-01, -9.44718270e-01,  9.99102498e-01,
         9.99273586e-01,  9.97964072e-01,  9.98809893e-01,
         9.99306302e-01,  9.98670142e-01,  9.89075401e-01],
       [ 9.99357360e-01,  8.85756152e-04,  9.96279483e-01,
         9.99197947e-01,  9.41407791e-01,  9.97899466e-01,
         9.99417552e-01,  9.98836192e-01,  9.99109838e-01,
         9.97212584e-01, -9.74070678e-01,  9.99506469e-01,
         9.99304970e-01,  9.98532839e-01,  9.99435799e-01,
         9.99191149e-01, -9.45834544e-01,  9.99087732e-01,
         9.99237110e-01,  9.98261304e-01,  9.98920402e-01,
         9.99254574e-01,  9.98828941e-01,  9.88935866e-01],
       [ 9.96834344e-01,  9.96279483e-01,  4.28636430e-07,
         9.96600181e-01,  9.47870932e-01,  9.95399154e-01,
         9.96381458e-01,  9.96592822e-01,  9.96914826e-01,
         9.93862938e-01, -9.68327765e-01,  9.96760950e-01,
         9.96379221e-01,  9.96672585e-01,  9.96674621e-01,
         9.95069722e-01, -9.40676110e-01,  9.96340223e-01,
         9.96354345e-01,  9.94003174e-01,  9.96112855e-01,
         9.96745892e-01,  9.95997518e-01,  9.89905446e-01],
       [ 9.99572167e-01,  9.99197947e-01,  9.96600181e-01,
         1.21966822e-09,  9.43053169e-01,  9.97880532e-01,
         9.99500369e-01,  9.98410401e-01,  9.99173244e-01,
         9.96775797e-01, -9.74367127e-01,  9.99362203e-01,
         9.99367414e-01,  9.98297331e-01,  9.98880383e-01,
         9.98663753e-01, -9.44650667e-01,  9.98960337e-01,
         9.99311633e-01,  9.97876202e-01,  9.98462419e-01,
         9.99263944e-01,  9.98810150e-01,  9.89492504e-01],
       [ 9.42281243e-01,  9.41407791e-01,  9.47870932e-01,
         9.43053169e-01,  5.87433525e-09,  9.47101615e-01,
         9.43035090e-01,  9.51819965e-01,  9.46546373e-01,
         9.35729856e-01, -8.83958006e-01,  9.43231419e-01,
         9.39614529e-01,  9.50658526e-01,  9.44337124e-01,
         9.41768971e-01, -8.57348147e-01,  9.46361648e-01,
         9.43788045e-01,  9.35138095e-01,  9.43924294e-01,
         9.46696871e-01,  9.46932752e-01,  9.74895278e-01],
       [ 9.97900189e-01,  9.97899466e-01,  9.95399154e-01,
         9.97880532e-01,  9.47101615e-01,  8.52516849e-08,
         9.98162029e-01,  9.97693085e-01,  9.97494890e-01,
         9.94870487e-01, -9.71281207e-01,  9.97825507e-01,
         9.97609029e-01,  9.97078699e-01,  9.97937996e-01,
         9.97886353e-01, -9.39807793e-01,  9.97323488e-01,
         9.98086971e-01,  9.96890683e-01,  9.97306126e-01,
         9.98328683e-01,  9.98019225e-01,  9.90401184e-01],
       [ 9.99540337e-01,  9.99417552e-01,  9.96381458e-01,
         9.99500369e-01,  9.43035090e-01,  9.98162029e-01,
         1.97026096e-09,  9.98697236e-01,  9.99167466e-01,
         9.96534267e-01, -9.74797106e-01,  9.99405117e-01,
         9.99312797e-01,  9.98338095e-01,  9.99222108e-01,
         9.99012700e-01, -9.45433385e-01,  9.99002384e-01,
         9.99391574e-01,  9.98227196e-01,  9.98655866e-01,
         9.99450287e-01,  9.98871183e-01,  9.89348747e-01],
       [ 9.98601652e-01,  9.98836192e-01,  9.96592822e-01,
         9.98410401e-01,  9.51819965e-01,  9.97693085e-01,
         9.98697236e-01,  3.81563526e-10,  9.98687080e-01,
         9.97121814e-01, -9.69119242e-01,  9.98787443e-01,
         9.98289054e-01,  9.98866436e-01,  9.98833399e-01,
         9.98412389e-01, -9.40737501e-01,  9.99081172e-01,
         9.98609560e-01,  9.96732620e-01,  9.98290946e-01,
         9.98808945e-01,  9.98467379e-01,  9.92893798e-01],
       [ 9.99273813e-01,  9.99109838e-01,  9.96914826e-01,
         9.99173244e-01,  9.46546373e-01,  9.97494890e-01,
         9.99167466e-01,  9.98687080e-01,  1.63952743e-09,
         9.97076275e-01, -9.71833154e-01,  9.99346179e-01,
         9.99129781e-01,  9.98683650e-01,  9.99143749e-01,
         9.98628992e-01, -9.42716179e-01,  9.99193054e-01,
         9.99051762e-01,  9.97592295e-01,  9.98279757e-01,
         9.99206541e-01,  9.98709951e-01,  9.91294961e-01],
       [ 9.97018616e-01,  9.97212584e-01,  9.93862938e-01,
         9.96775797e-01,  9.35729856e-01,  9.94870487e-01,
         9.96534267e-01,  9.97121814e-01,  9.97076275e-01,
         4.14508406e-09, -9.69602110e-01,  9.97209084e-01,
         9.97269710e-01,  9.96130871e-01,  9.96598901e-01,
         9.96945711e-01, -9.41737281e-01,  9.97547921e-01,
         9.96623630e-01,  9.95604803e-01,  9.96053414e-01,
         9.96252977e-01,  9.96293594e-01,  9.87014134e-01],
       [-9.73801139e-01, -9.74070678e-01, -9.68327765e-01,
        -9.74367127e-01, -8.83958006e-01, -9.71281207e-01,
        -9.74797106e-01, -9.69119242e-01, -9.71833154e-01,
        -9.69602110e-01,  7.91579754e-08, -9.72627284e-01,
        -9.74397877e-01, -9.66816215e-01, -9.74055921e-01,
        -9.72152413e-01,  9.49931280e-01, -9.70349967e-01,
        -9.74543996e-01, -9.77042256e-01, -9.72510826e-01,
        -9.72753685e-01, -9.70977647e-01, -9.49332577e-01],
       [ 9.99572102e-01,  9.99506469e-01,  9.96760950e-01,
         9.99362203e-01,  9.43231419e-01,  9.97825507e-01,
         9.99405117e-01,  9.98787443e-01,  9.99346179e-01,
         9.97209084e-01, -9.72627284e-01,  9.49759898e-10,
         9.99396168e-01,  9.98616747e-01,  9.99231469e-01,
         9.99092707e-01, -9.43690714e-01,  9.99236560e-01,
         9.99125265e-01,  9.97720253e-01,  9.98657360e-01,
         9.99322811e-01,  9.98924819e-01,  9.89982094e-01],
       [ 9.99493833e-01,  9.99304970e-01,  9.96379221e-01,
         9.99367414e-01,  9.39614529e-01,  9.97609029e-01,
         9.99312797e-01,  9.98289054e-01,  9.99129781e-01,
         9.97269710e-01, -9.74397877e-01,  9.99396168e-01,
         6.10314496e-08,  9.98282510e-01,  9.98908676e-01,
         9.99022688e-01, -9.44584256e-01,  9.99076968e-01,
         9.99242844e-01,  9.98014936e-01,  9.98393894e-01,
         9.99093343e-01,  9.98535127e-01,  9.88011557e-01],
       [ 9.98516049e-01,  9.98532839e-01,  9.96672585e-01,
         9.98297331e-01,  9.50658526e-01,  9.97078699e-01,
         9.98338095e-01,  9.98866436e-01,  9.98683650e-01,
         9.96130871e-01, -9.66816215e-01,  9.98616747e-01,
         9.98282510e-01,  1.39566686e-09,  9.98517176e-01,
         9.98377797e-01, -9.41181012e-01,  9.99085880e-01,
         9.98417332e-01,  9.95895305e-01,  9.98089538e-01,
         9.98786233e-01,  9.98273278e-01,  9.92133050e-01],
       [ 9.99016459e-01,  9.99435799e-01,  9.96674621e-01,
         9.98880383e-01,  9.44337124e-01,  9.97937996e-01,
         9.99222108e-01,  9.98833399e-01,  9.99143749e-01,
         9.96598901e-01, -9.74055921e-01,  9.99231469e-01,
         9.98908676e-01,  9.98517176e-01,  3.91145914e-09,
         9.98762801e-01, -9.44712685e-01,  9.98882295e-01,
         9.99167722e-01,  9.98365735e-01,  9.98539526e-01,
         9.99349674e-01,  9.98682774e-01,  9.90282263e-01],
       [ 9.99032878e-01,  9.99191149e-01,  9.95069722e-01,
         9.98663753e-01,  9.41768971e-01,  9.97886353e-01,
         9.99012700e-01,  9.98412389e-01,  9.98628992e-01,
         9.96945711e-01, -9.72152413e-01,  9.99092707e-01,
         9.99022688e-01,  9.98377797e-01,  9.98762801e-01,
         6.12438062e-09, -9.43278583e-01,  9.98714615e-01,
         9.98765094e-01,  9.97518255e-01,  9.98234814e-01,
         9.98833239e-01,  9.98556185e-01,  9.88600916e-01],
       [-9.44718270e-01, -9.45834544e-01, -9.40676110e-01,
        -9.44650667e-01, -8.57348147e-01, -9.39807793e-01,
        -9.45433385e-01, -9.40737501e-01, -9.42716179e-01,
        -9.41737281e-01,  9.49931280e-01, -9.43690714e-01,
        -9.44584256e-01, -9.41181012e-01, -9.44712685e-01,
        -9.43278583e-01,  1.85097555e-08, -9.42274581e-01,
        -9.43930225e-01, -9.44416759e-01, -9.44123084e-01,
        -9.43611879e-01, -9.43058469e-01, -9.20277725e-01],
       [ 9.99102498e-01,  9.99087732e-01,  9.96340223e-01,
         9.98960337e-01,  9.46361648e-01,  9.97323488e-01,
         9.99002384e-01,  9.99081172e-01,  9.99193054e-01,
         9.97547921e-01, -9.70349967e-01,  9.99236560e-01,
         9.99076968e-01,  9.99085880e-01,  9.98882295e-01,
         9.98714615e-01, -9.42274581e-01,  4.63172335e-10,
         9.99055447e-01,  9.96678367e-01,  9.97947641e-01,
         9.99023756e-01,  9.98655609e-01,  9.90680163e-01],
       [ 9.99273586e-01,  9.99237110e-01,  9.96354345e-01,
         9.99311633e-01,  9.43788045e-01,  9.98086971e-01,
         9.99391574e-01,  9.98609560e-01,  9.99051762e-01,
         9.96623630e-01, -9.74543996e-01,  9.99125265e-01,
         9.99242844e-01,  9.98417332e-01,  9.99167722e-01,
         9.98765094e-01, -9.43930225e-01,  9.99055447e-01,
         1.49968419e-08,  9.98019738e-01,  9.98407433e-01,
         9.99222857e-01,  9.98652394e-01,  9.89226980e-01],
       [ 9.97964072e-01,  9.98261304e-01,  9.94003174e-01,
         9.97876202e-01,  9.35138095e-01,  9.96890683e-01,
         9.98227196e-01,  9.96732620e-01,  9.97592295e-01,
         9.95604803e-01, -9.77042256e-01,  9.97720253e-01,
         9.98014936e-01,  9.95895305e-01,  9.98365735e-01,
         9.97518255e-01, -9.44416759e-01,  9.96678367e-01,
         9.98019738e-01,  7.47650147e-10,  9.97617693e-01,
         9.97870740e-01,  9.97367170e-01,  9.86577350e-01],
       [ 9.98809893e-01,  9.98920402e-01,  9.96112855e-01,
         9.98462419e-01,  9.43924294e-01,  9.97306126e-01,
         9.98655866e-01,  9.98290946e-01,  9.98279757e-01,
         9.96053414e-01, -9.72510826e-01,  9.98657360e-01,
         9.98393894e-01,  9.98089538e-01,  9.98539526e-01,
         9.98234814e-01, -9.44123084e-01,  9.97947641e-01,
         9.98407433e-01,  9.97617693e-01,  9.94482237e-10,
         9.98596112e-01,  9.98000736e-01,  9.89489744e-01],
       [ 9.99306302e-01,  9.99254574e-01,  9.96745892e-01,
         9.99263944e-01,  9.46696871e-01,  9.98328683e-01,
         9.99450287e-01,  9.98808945e-01,  9.99206541e-01,
         9.96252977e-01, -9.72753685e-01,  9.99322811e-01,
         9.99093343e-01,  9.98786233e-01,  9.99349674e-01,
         9.98833239e-01, -9.43611879e-01,  9.99023756e-01,
         9.99222857e-01,  9.97870740e-01,  9.98596112e-01,
         7.44695142e-09,  9.99016834e-01,  9.90734007e-01],
       [ 9.98670142e-01,  9.98828941e-01,  9.95997518e-01,
         9.98810150e-01,  9.46932752e-01,  9.98019225e-01,
         9.98871183e-01,  9.98467379e-01,  9.98709951e-01,
         9.96293594e-01, -9.70977647e-01,  9.98924819e-01,
         9.98535127e-01,  9.98273278e-01,  9.98682774e-01,
         9.98556185e-01, -9.43058469e-01,  9.98655609e-01,
         9.98652394e-01,  9.97367170e-01,  9.98000736e-01,
         9.99016834e-01,  1.79765233e-09,  9.91199840e-01],
       [ 9.89075401e-01,  9.88935866e-01,  9.89905446e-01,
         9.89492504e-01,  9.74895278e-01,  9.90401184e-01,
         9.89348747e-01,  9.92893798e-01,  9.91294961e-01,
         9.87014134e-01, -9.49332577e-01,  9.89982094e-01,
         9.88011557e-01,  9.92133050e-01,  9.90282263e-01,
         9.88600916e-01, -9.20277725e-01,  9.90680163e-01,
         9.89226980e-01,  9.86577350e-01,  9.89489744e-01,
         9.90734007e-01,  9.91199840e-01,  9.41720628e-08]]))

Algorithm Section

N = 24
model = GEKKO(remote=False)
wesg = model.Array(model.Var , N , value = 1/N , lb=0 , ub=1)
model.Equation = (sum(wesg) == 1)

def obj(rf = 0.02):
    esg_portfo = 0
    for i in range(N):
        esg_portfo += model.Intermediate(wesg[i] * ((esg_scores_df["Score 2019"][i] + esg_scores_df["Score 2020"][i])/2))


    return_portfo = 0
    for i in range(N):
        return_portfo += model.Intermediate(wesg[i]*((predicted_return_dataframe.iloc[0 , i] + r.iloc[0 ,i])/2))

    sigma_portfo = 0
    for i in range(N):
        for j in range(N):
            sigma_portfo += model.Intermediate(wesg[i] * ((sigma.iloc[i,j] + sigma_bar.iloc[i,j])/2) * wesg[j])


    return -esg_portfo * ((return_portfo - rf)/sigma_portfo)

model.Minimize(obj())
model.solve(disp=False)
wesg = np.array( [item[0] for item in wesg], dtype=float)
print(wesg)

Result

The code results in:

[0.00000000e+00 1.31172076e-07 0.00000000e+00 0.00000000e+00 
 1.88847768e-01 1.00000000e+00 0.00000000e+00 0.00000000e+00 
 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 
 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 
 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 
 9.07168980e-01 0.00000000e+00 0.00000000e+00 0.00000000e+00]

But, there are many ones in the result!! I have a constraint of sum(wesg) == 1! But the result indicates that somehow, Gekko doesn't consider the constraint. If you try print(wesg.sum()), then it will result:

7.096016879722077

Which I expected to be exact 1!
How can I fix this issue, and where is the problem? Any help would be appreciated.

Upvotes: 2

Views: 68

Answers (1)

John Hedengren
John Hedengren

Reputation: 14376

The error is with model.Equation = (sum(wesg) == 1) that redefines the model.Equation function as False. Use this instead:

model.Equation(sum(wesg) == 1)

The new result enforces the constraint to add to one with sum(wesg)=1.000000000001.

[0.         0.         0.         0.         0.1425506  0.24959448
 0.         0.         0.         0.         0.         0.0281217
 0.32053308 0.         0.         0.         0.         0.
 0.05860444 0.18554967 0.01504603 0.         0.         0.        ]

Here are a couple additional suggestions and options:

  • For larger portfolios use model.sum() instead for better performance.
  • To select the top 3 stocks as integers (purchase or don't purchase) then use integer=True with the APOPT solver.
wesg = model.Array(model.Var, N, value = 1/N, lb=0, ub=1, integer=True)
model.Equation(model.sum(wesg) == 3)
model.options.SOLVER=1

Here is the complete code.

from gekko import GEKKO
import numpy as np
import pandas as pd

esg_scores_df = pd.DataFrame({'Score 2019': {'MSFT': 7,'PEP': 7,'TSLA': 4,'AMZN': 6,'LKQ': 3,'ABMD': 3,'MSI': 10,'PH': 8,'NKE': 6,'TM': 7,'EOG': 7,'GOOGL': 5,'NFLX': 4,'GS': 6,'EQIX': 9,'EA': 7,'AAP': 6,'TEL': 9,'DG': 6,'EXR': 5,'MDLZ': 6,'FIS': 8,'CRL': 8,'RCL': 9},
 'Score 2020': {'MSFT': 6,'PEP': 11,'TSLA': 4,'AMZN': 6,'LKQ': 4,'ABMD': 4,'MSI': 8,'PH': 8,'NKE': 6,'TM': 7,'EOG': 7,'GOOGL': 5,'NFLX': 3,'GS': 6,'EQIX': 9,'EA': 6,'AAP': 7,'TEL': 9,'DG': 6,'EXR': 4,'MDLZ': 6,'FIS': 8,'CRL': 8,'RCL': 7}})

predicted_return_dataframe = pd.DataFrame({'MSFT': 1.0982472257593677e-15,'PEP': 4.567069595849647e-09,'TSLA': 7.439258841202596e-10,'AMZN': 3.176883309676764e-07,'LKQ': 4.825709334830293e-05,'ABMD': 2.0608058642685837e-05,'MSI': -3.1789250961959136e-12,'PH': -2.257237871892785e-07,'NKE': -4.737530217609426e-07,'TM': 9.951932427172896e-07,'EOG': 1.184074639824261e-08,'GOOGL': -1.7027206923083418e-10,'NFLX': 2.948344729885545e-05,'GS': 1.458862302453713e-07,'EQIX': 4.620207503091301e-07,'EA': -1.297137640100873e-06,'AAP': -3.493153382990658e-07,'TEL': 8.202463568291799e-08,'DG': 2.743802312024829e-05,'EXR': 1.971994818465128e-11,'MDLZ': 1.578772827915881e-08,'FIS': 1.3314663987166631e-08,'CRL': 4.112083587242872e-05,'RCL': -1.470829206425942e-09} , index = [0])

r = pd.DataFrame({'MSFT': -0.029838842874655123,'PEP': -0.012265555866403165,'TSLA': -0.053599428210690636,'AMZN': -0.02614876342440773,'LKQ': -0.026658034482507052,'ABMD': -0.017274321994365294,'MSI': -0.018624198080929168,'PH': -0.02871952268633362,'NKE': -0.028820168231794074,'TM': -0.011208781085200492,'EOG': -0.04606883798249617,'GOOGL': -0.027983366801701926,'NFLX': -0.0070609860042608165,'GS': -0.02429261616692462,'EQIX': -0.015181566244607758,'EA': -0.012009295653284258,'AAP': -0.011979871239295382,'TEL': -0.021782414925879602,'DG': -0.009820085124020328,'EXR': -0.012233190959318829,'MDLZ': -0.015917631061436933,'FIS': -0.023877815976094417,'CRL': -0.020169902356185498,'RCL': -0.06831607178882856} , index = [0])

sigma = pd.DataFrame(np.array([[ 1.02188994e-04,  3.16399586e-05,  8.54243667e-05,
         7.14148287e-05,  3.55313650e-05,  5.44796564e-05,
         3.39128448e-05,  6.65003271e-05,  5.42932808e-05,
         2.29333906e-05,  4.26407605e-05,  7.92791756e-05,
         9.28910574e-05,  6.36770764e-05,  3.75024646e-05,
         5.13720672e-05,  1.33646720e-05,  6.21865710e-05,
         4.72888751e-05,  2.35546749e-06,  2.49700413e-05,
         6.74503236e-05,  7.08948785e-05,  5.55096135e-05],
       [ 3.16399586e-05,  6.47824823e-05, -2.57461009e-05,
         1.81931187e-05,  2.11795049e-05,  1.01708683e-05,
         3.33739243e-05,  1.23893822e-05,  2.74825418e-05,
         1.35954411e-05,  2.37108310e-06,  2.34208728e-05,
         1.96972793e-05,  1.09335123e-05,  4.26042775e-05,
         2.76849308e-05,  6.01821651e-06,  8.04387109e-06,
         3.10892437e-05,  2.79970364e-05,  3.70572613e-05,
         3.08215527e-05,  2.57244480e-05,  8.72002781e-06],
       [ 8.54243667e-05, -2.57461009e-05,  8.84138653e-04,
         6.16478906e-05, -1.78063009e-05,  3.62712388e-05,
        -6.15200573e-05,  8.63597848e-05,  2.12571109e-05,
         3.21749681e-05,  6.54693912e-05,  7.95298035e-05,
         1.53917874e-04,  8.06306277e-05, -5.27893372e-06,
         2.60899474e-05,  4.29017379e-05,  6.13689353e-05,
         2.30097086e-06, -4.45963115e-05, -2.83669072e-06,
         2.95395217e-05,  4.53889239e-05,  3.11615533e-05],
       [ 7.14148287e-05,  1.81931187e-05,  6.16478906e-05,
         1.19357840e-04,  5.48763301e-05,  5.55161292e-05,
         2.77288469e-05,  6.25231790e-05,  5.19494452e-05,
         1.93193913e-05,  4.28946368e-05,  7.00210371e-05,
         9.92756795e-05,  6.54630027e-05,  1.73935405e-05,
         4.46819063e-05,  2.94199398e-05,  5.76749375e-05,
         3.75634244e-05, -5.53847280e-06,  9.72193169e-06,
         4.42756733e-05,  4.21469376e-05,  4.35344231e-05],
       [ 3.55313650e-05,  2.11795049e-05, -1.78063009e-05,
         5.48763301e-05,  3.49607174e-04,  1.58156275e-04,
        -1.64565378e-05,  5.95602984e-05,  3.36138721e-05,
         2.25095973e-05,  4.90144491e-05,  5.60207136e-05,
         3.73119885e-05,  8.65010497e-05, -1.68774498e-05,
         1.06928038e-05,  3.53732120e-05,  8.46071106e-05,
         3.89200328e-05, -1.10740797e-05,  4.20238479e-06,
         2.07371361e-05,  2.27640364e-05,  7.39017715e-05],
       [ 5.44796564e-05,  1.01708683e-05,  3.62712388e-05,
         5.55161292e-05,  1.58156275e-04,  1.12266763e-03,
         2.49786917e-05,  5.60053839e-05, -2.57686022e-05,
         3.00855419e-05,  2.09079416e-04,  1.21797841e-04,
         3.80689080e-06,  1.17305259e-04, -4.95192897e-05,
         5.56059321e-05,  2.87765760e-06,  1.13640096e-04,
        -2.73690072e-05,  2.17458024e-05, -1.24009254e-05,
         6.11287657e-05,  1.12849096e-04,  1.17234141e-04],
       [ 3.39128448e-05,  3.33739243e-05, -6.15200573e-05,
         2.77288469e-05, -1.64565378e-05,  2.49786917e-05,
         1.84271573e-04, -2.99455473e-06,  3.56885701e-05,
         1.53451236e-05,  3.20222217e-06,  3.00619247e-05,
         5.17902613e-05,  1.69851832e-05,  7.75007583e-05,
         7.49839347e-06, -3.78485373e-05, -1.28942631e-05,
         4.36657573e-05,  3.97590833e-05,  4.04704969e-05,
         4.05201790e-05,  4.01384618e-05,  4.82818631e-06],
       [ 6.65003271e-05,  1.23893822e-05,  8.63597848e-05,
         6.25231790e-05,  5.95602984e-05,  5.60053839e-05,
        -2.99455473e-06,  2.86568704e-04,  6.55278686e-05,
         4.08938883e-05,  1.18822482e-04,  9.32577766e-05,
         7.92498191e-05,  1.38967662e-04, -1.64128182e-05,
         4.16393158e-05,  1.06300676e-04,  1.31672888e-04,
         6.64839109e-05, -5.14108669e-05, -1.03044572e-05,
         1.59107041e-05,  7.65457600e-05,  1.31611693e-04],
       [ 5.42932808e-05,  2.74825418e-05,  2.12571109e-05,
         5.19494452e-05,  3.36138721e-05, -2.57686022e-05,
         3.56885701e-05,  6.55278686e-05,  1.36374334e-04,
         1.36781102e-05,  2.38544176e-05,  5.90104054e-05,
         6.20754315e-05,  5.84082445e-05,  3.96422393e-05,
         2.96064418e-05,  5.54456912e-05,  5.69396332e-05,
         7.28867485e-05,  7.92870807e-06,  3.79528145e-05,
         3.38036564e-05,  3.47015652e-05,  3.86545249e-05],
       [ 2.29333906e-05,  1.35954411e-05,  3.21749681e-05,
         1.93193913e-05,  2.25095973e-05,  3.00855419e-05,
         1.53451236e-05,  4.08938883e-05,  1.36781102e-05,
         5.30619573e-05,  4.42693706e-05,  2.92937393e-05,
         1.15184525e-05,  3.04141154e-05,  1.11981894e-06,
         1.29388215e-05,  1.41913521e-05,  2.37704063e-05,
         1.27983719e-05, -3.53963791e-06,  5.41505031e-06,
         1.21874870e-05,  2.04099948e-05,  2.89151466e-05],
       [ 4.26407605e-05,  2.37108310e-06,  6.54693912e-05,
         4.28946368e-05,  4.90144491e-05,  2.09079416e-04,
         3.20222217e-06,  1.18822482e-04,  2.38544176e-05,
         4.42693706e-05,  5.01946804e-04,  7.79572195e-05,
         7.61563242e-05,  1.31597522e-04, -2.43789107e-05,
         6.77962026e-05,  5.39745318e-05,  9.05223133e-05,
        -1.88433584e-06, -1.63784490e-05, -1.04001201e-05,
         1.79450881e-05,  5.33951974e-05,  1.07102393e-04],
       [ 7.92791756e-05,  2.34208728e-05,  7.95298035e-05,
         7.00210371e-05,  5.60207136e-05,  1.21797841e-04,
         3.00619247e-05,  9.32577766e-05,  5.90104054e-05,
         2.92937393e-05,  7.79572195e-05,  1.10688236e-04,
         8.13294795e-05,  8.72981821e-05,  2.13737337e-05,
         4.33439061e-05,  3.06090710e-05,  7.60853329e-05,
         4.44363057e-05,  3.33458671e-06,  1.60908360e-05,
         4.09067616e-05,  5.72051871e-05,  6.05239478e-05],
       [ 9.28910574e-05,  1.96972793e-05,  1.53917874e-04,
         9.92756795e-05,  3.73119885e-05,  3.80689080e-06,
         5.17902613e-05,  7.92498191e-05,  6.20754315e-05,
         1.15184525e-05,  7.61563242e-05,  8.13294795e-05,
         3.77348891e-04,  8.99709029e-05,  2.58732673e-05,
         8.24015922e-05,  2.77333081e-05,  4.74146019e-05,
         3.76467363e-05, -5.60031564e-06,  2.25653918e-05,
         6.22679966e-05,  3.92394407e-05,  6.47067147e-05],
       [ 6.36770764e-05,  1.09335123e-05,  8.06306277e-05,
         6.54630027e-05,  8.65010497e-05,  1.17305259e-04,
         1.69851832e-05,  1.38967662e-04,  5.84082445e-05,
         3.04141154e-05,  1.31597522e-04,  8.72981821e-05,
         8.99709029e-05,  1.54802097e-04, -1.57072336e-05,
         3.58129141e-05,  5.52667399e-05,  1.02065825e-04,
         4.96942712e-05, -2.44193897e-05, -5.66188177e-06,
         2.35884764e-05,  5.15584350e-05,  9.98376706e-05],
       [ 3.75024646e-05,  4.26042775e-05, -5.27893372e-06,
         1.73935405e-05, -1.68774498e-05, -4.95192897e-05,
         7.75007583e-05, -1.64128182e-05,  3.96422393e-05,
         1.11981894e-06, -2.43789107e-05,  2.13737337e-05,
         2.58732673e-05, -1.57072336e-05,  1.54605175e-04,
         1.07085192e-05, -1.14274871e-05, -1.26204468e-05,
         2.50810750e-05,  5.60340845e-05,  4.60520336e-05,
         4.29696767e-05,  5.33004299e-05, -1.56063893e-05],
       [ 5.13720672e-05,  2.76849308e-05,  2.60899474e-05,
         4.46819063e-05,  1.06928038e-05,  5.56059321e-05,
         7.49839347e-06,  4.16393158e-05,  2.96064418e-05,
         1.29388215e-05,  6.77962026e-05,  4.33439061e-05,
         8.24015922e-05,  3.58129141e-05,  1.07085192e-05,
         1.32544808e-04,  3.15561503e-05,  3.62681876e-05,
         1.76503394e-05,  1.90982407e-07,  1.02992114e-05,
         2.81341342e-05,  2.81970597e-05,  3.94413355e-05],
       [ 1.33646720e-05,  6.01821651e-06,  4.29017379e-05,
         2.94199398e-05,  3.53732120e-05,  2.87765760e-06,
        -3.78485373e-05,  1.06300676e-04,  5.54456912e-05,
         1.41913521e-05,  5.39745318e-05,  3.06090710e-05,
         2.77333081e-05,  5.52667399e-05, -1.14274871e-05,
         3.15561503e-05,  2.71861487e-04,  6.04272650e-05,
         3.55256428e-05, -2.37123843e-05, -1.99844011e-05,
        -2.02943319e-07, -4.12746174e-07,  6.80701129e-05],
       [ 6.21865710e-05,  8.04387109e-06,  6.13689353e-05,
         5.76749375e-05,  8.46071106e-05,  1.13640096e-04,
        -1.28942631e-05,  1.31672888e-04,  5.69396332e-05,
         2.37704063e-05,  9.05223133e-05,  7.60853329e-05,
         4.74146019e-05,  1.02065825e-04, -1.26204468e-05,
         3.62681876e-05,  6.04272650e-05,  1.67171047e-04,
         5.06392219e-05, -1.02673299e-05,  1.64715372e-05,
         2.50897861e-05,  5.81836032e-05,  1.00294572e-04],
       [ 4.72888751e-05,  3.10892437e-05,  2.30097086e-06,
         3.75634244e-05,  3.89200328e-05, -2.73690072e-05,
         4.36657573e-05,  6.64839109e-05,  7.28867485e-05,
         1.27983719e-05, -1.88433584e-06,  4.44363057e-05,
         3.76467363e-05,  4.96942712e-05,  2.50810750e-05,
         1.76503394e-05,  3.55256428e-05,  5.06392219e-05,
         1.99771178e-04,  4.70710752e-06,  3.76160380e-05,
         2.30014580e-05,  3.12554634e-05,  5.94948441e-06],
       [ 2.35546749e-06,  2.79970364e-05, -4.45963115e-05,
        -5.53847280e-06, -1.10740797e-05,  2.17458024e-05,
         3.97590833e-05, -5.14108669e-05,  7.92870807e-06,
        -3.53963791e-06, -1.63784490e-05,  3.33458671e-06,
        -5.60031564e-06, -2.44193897e-05,  5.60340845e-05,
         1.90982407e-07, -2.37123843e-05, -1.02673299e-05,
         4.70710752e-06,  8.86508330e-05,  4.02039134e-05,
         2.39025489e-05, -5.94660474e-06, -1.92301274e-05],
       [ 2.49700413e-05,  3.70572613e-05, -2.83669072e-06,
         9.72193169e-06,  4.20238479e-06, -1.24009254e-05,
         4.04704969e-05, -1.03044572e-05,  3.79528145e-05,
         5.41505031e-06, -1.04001201e-05,  1.60908360e-05,
         2.25653918e-05, -5.66188177e-06,  4.60520336e-05,
         1.02992114e-05, -1.99844011e-05,  1.64715372e-05,
         3.76160380e-05,  4.02039134e-05,  8.23927778e-05,
         3.21948208e-05,  3.50482953e-05, -1.97971783e-07],
       [ 6.74503236e-05,  3.08215527e-05,  2.95395217e-05,
         4.42756733e-05,  2.07371361e-05,  6.11287657e-05,
         4.05201790e-05,  1.59107041e-05,  3.38036564e-05,
         1.21874870e-05,  1.79450881e-05,  4.09067616e-05,
         6.22679966e-05,  2.35884764e-05,  4.29696767e-05,
         2.81341342e-05, -2.02943319e-07,  2.50897861e-05,
         2.30014580e-05,  2.39025489e-05,  3.21948208e-05,
         1.20680211e-04,  5.96710279e-05,  3.14411495e-05],
       [ 7.08948785e-05,  2.57244480e-05,  4.53889239e-05,
         4.21469376e-05,  2.27640364e-05,  1.12849096e-04,
         4.01384618e-05,  7.65457600e-05,  3.47015652e-05,
         2.04099948e-05,  5.33951974e-05,  5.72051871e-05,
         3.92394407e-05,  5.15584350e-05,  5.33004299e-05,
         2.81970597e-05, -4.12746174e-07,  5.81836032e-05,
         3.12554634e-05, -5.94660474e-06,  3.50482953e-05,
         5.96710279e-05,  1.65974972e-04,  5.42453625e-05],
       [ 5.55096135e-05,  8.72002781e-06,  3.11615533e-05,
         4.35344231e-05,  7.39017715e-05,  1.17234141e-04,
         4.82818631e-06,  1.31611693e-04,  3.86545249e-05,
         2.89151466e-05,  1.07102393e-04,  6.05239478e-05,
         6.47067147e-05,  9.98376706e-05, -1.56063893e-05,
         3.94413355e-05,  6.80701129e-05,  1.00294572e-04,
         5.94948441e-06, -1.92301274e-05, -1.97971783e-07,
         3.14411495e-05,  5.42453625e-05,  1.92061080e-04]]))

sigma_bar = pd.DataFrame(np.array([[ 1.26820873e-09,  9.99357360e-01,  9.96834344e-01,
         9.99572167e-01,  9.42281243e-01,  9.97900189e-01,
         9.99540337e-01,  9.98601652e-01,  9.99273813e-01,
         9.97018616e-01, -9.73801139e-01,  9.99572102e-01,
         9.99493833e-01,  9.98516049e-01,  9.99016459e-01,
         9.99032878e-01, -9.44718270e-01,  9.99102498e-01,
         9.99273586e-01,  9.97964072e-01,  9.98809893e-01,
         9.99306302e-01,  9.98670142e-01,  9.89075401e-01],
       [ 9.99357360e-01,  8.85756152e-04,  9.96279483e-01,
         9.99197947e-01,  9.41407791e-01,  9.97899466e-01,
         9.99417552e-01,  9.98836192e-01,  9.99109838e-01,
         9.97212584e-01, -9.74070678e-01,  9.99506469e-01,
         9.99304970e-01,  9.98532839e-01,  9.99435799e-01,
         9.99191149e-01, -9.45834544e-01,  9.99087732e-01,
         9.99237110e-01,  9.98261304e-01,  9.98920402e-01,
         9.99254574e-01,  9.98828941e-01,  9.88935866e-01],
       [ 9.96834344e-01,  9.96279483e-01,  4.28636430e-07,
         9.96600181e-01,  9.47870932e-01,  9.95399154e-01,
         9.96381458e-01,  9.96592822e-01,  9.96914826e-01,
         9.93862938e-01, -9.68327765e-01,  9.96760950e-01,
         9.96379221e-01,  9.96672585e-01,  9.96674621e-01,
         9.95069722e-01, -9.40676110e-01,  9.96340223e-01,
         9.96354345e-01,  9.94003174e-01,  9.96112855e-01,
         9.96745892e-01,  9.95997518e-01,  9.89905446e-01],
       [ 9.99572167e-01,  9.99197947e-01,  9.96600181e-01,
         1.21966822e-09,  9.43053169e-01,  9.97880532e-01,
         9.99500369e-01,  9.98410401e-01,  9.99173244e-01,
         9.96775797e-01, -9.74367127e-01,  9.99362203e-01,
         9.99367414e-01,  9.98297331e-01,  9.98880383e-01,
         9.98663753e-01, -9.44650667e-01,  9.98960337e-01,
         9.99311633e-01,  9.97876202e-01,  9.98462419e-01,
         9.99263944e-01,  9.98810150e-01,  9.89492504e-01],
       [ 9.42281243e-01,  9.41407791e-01,  9.47870932e-01,
         9.43053169e-01,  5.87433525e-09,  9.47101615e-01,
         9.43035090e-01,  9.51819965e-01,  9.46546373e-01,
         9.35729856e-01, -8.83958006e-01,  9.43231419e-01,
         9.39614529e-01,  9.50658526e-01,  9.44337124e-01,
         9.41768971e-01, -8.57348147e-01,  9.46361648e-01,
         9.43788045e-01,  9.35138095e-01,  9.43924294e-01,
         9.46696871e-01,  9.46932752e-01,  9.74895278e-01],
       [ 9.97900189e-01,  9.97899466e-01,  9.95399154e-01,
         9.97880532e-01,  9.47101615e-01,  8.52516849e-08,
         9.98162029e-01,  9.97693085e-01,  9.97494890e-01,
         9.94870487e-01, -9.71281207e-01,  9.97825507e-01,
         9.97609029e-01,  9.97078699e-01,  9.97937996e-01,
         9.97886353e-01, -9.39807793e-01,  9.97323488e-01,
         9.98086971e-01,  9.96890683e-01,  9.97306126e-01,
         9.98328683e-01,  9.98019225e-01,  9.90401184e-01],
       [ 9.99540337e-01,  9.99417552e-01,  9.96381458e-01,
         9.99500369e-01,  9.43035090e-01,  9.98162029e-01,
         1.97026096e-09,  9.98697236e-01,  9.99167466e-01,
         9.96534267e-01, -9.74797106e-01,  9.99405117e-01,
         9.99312797e-01,  9.98338095e-01,  9.99222108e-01,
         9.99012700e-01, -9.45433385e-01,  9.99002384e-01,
         9.99391574e-01,  9.98227196e-01,  9.98655866e-01,
         9.99450287e-01,  9.98871183e-01,  9.89348747e-01],
       [ 9.98601652e-01,  9.98836192e-01,  9.96592822e-01,
         9.98410401e-01,  9.51819965e-01,  9.97693085e-01,
         9.98697236e-01,  3.81563526e-10,  9.98687080e-01,
         9.97121814e-01, -9.69119242e-01,  9.98787443e-01,
         9.98289054e-01,  9.98866436e-01,  9.98833399e-01,
         9.98412389e-01, -9.40737501e-01,  9.99081172e-01,
         9.98609560e-01,  9.96732620e-01,  9.98290946e-01,
         9.98808945e-01,  9.98467379e-01,  9.92893798e-01],
       [ 9.99273813e-01,  9.99109838e-01,  9.96914826e-01,
         9.99173244e-01,  9.46546373e-01,  9.97494890e-01,
         9.99167466e-01,  9.98687080e-01,  1.63952743e-09,
         9.97076275e-01, -9.71833154e-01,  9.99346179e-01,
         9.99129781e-01,  9.98683650e-01,  9.99143749e-01,
         9.98628992e-01, -9.42716179e-01,  9.99193054e-01,
         9.99051762e-01,  9.97592295e-01,  9.98279757e-01,
         9.99206541e-01,  9.98709951e-01,  9.91294961e-01],
       [ 9.97018616e-01,  9.97212584e-01,  9.93862938e-01,
         9.96775797e-01,  9.35729856e-01,  9.94870487e-01,
         9.96534267e-01,  9.97121814e-01,  9.97076275e-01,
         4.14508406e-09, -9.69602110e-01,  9.97209084e-01,
         9.97269710e-01,  9.96130871e-01,  9.96598901e-01,
         9.96945711e-01, -9.41737281e-01,  9.97547921e-01,
         9.96623630e-01,  9.95604803e-01,  9.96053414e-01,
         9.96252977e-01,  9.96293594e-01,  9.87014134e-01],
       [-9.73801139e-01, -9.74070678e-01, -9.68327765e-01,
        -9.74367127e-01, -8.83958006e-01, -9.71281207e-01,
        -9.74797106e-01, -9.69119242e-01, -9.71833154e-01,
        -9.69602110e-01,  7.91579754e-08, -9.72627284e-01,
        -9.74397877e-01, -9.66816215e-01, -9.74055921e-01,
        -9.72152413e-01,  9.49931280e-01, -9.70349967e-01,
        -9.74543996e-01, -9.77042256e-01, -9.72510826e-01,
        -9.72753685e-01, -9.70977647e-01, -9.49332577e-01],
       [ 9.99572102e-01,  9.99506469e-01,  9.96760950e-01,
         9.99362203e-01,  9.43231419e-01,  9.97825507e-01,
         9.99405117e-01,  9.98787443e-01,  9.99346179e-01,
         9.97209084e-01, -9.72627284e-01,  9.49759898e-10,
         9.99396168e-01,  9.98616747e-01,  9.99231469e-01,
         9.99092707e-01, -9.43690714e-01,  9.99236560e-01,
         9.99125265e-01,  9.97720253e-01,  9.98657360e-01,
         9.99322811e-01,  9.98924819e-01,  9.89982094e-01],
       [ 9.99493833e-01,  9.99304970e-01,  9.96379221e-01,
         9.99367414e-01,  9.39614529e-01,  9.97609029e-01,
         9.99312797e-01,  9.98289054e-01,  9.99129781e-01,
         9.97269710e-01, -9.74397877e-01,  9.99396168e-01,
         6.10314496e-08,  9.98282510e-01,  9.98908676e-01,
         9.99022688e-01, -9.44584256e-01,  9.99076968e-01,
         9.99242844e-01,  9.98014936e-01,  9.98393894e-01,
         9.99093343e-01,  9.98535127e-01,  9.88011557e-01],
       [ 9.98516049e-01,  9.98532839e-01,  9.96672585e-01,
         9.98297331e-01,  9.50658526e-01,  9.97078699e-01,
         9.98338095e-01,  9.98866436e-01,  9.98683650e-01,
         9.96130871e-01, -9.66816215e-01,  9.98616747e-01,
         9.98282510e-01,  1.39566686e-09,  9.98517176e-01,
         9.98377797e-01, -9.41181012e-01,  9.99085880e-01,
         9.98417332e-01,  9.95895305e-01,  9.98089538e-01,
         9.98786233e-01,  9.98273278e-01,  9.92133050e-01],
       [ 9.99016459e-01,  9.99435799e-01,  9.96674621e-01,
         9.98880383e-01,  9.44337124e-01,  9.97937996e-01,
         9.99222108e-01,  9.98833399e-01,  9.99143749e-01,
         9.96598901e-01, -9.74055921e-01,  9.99231469e-01,
         9.98908676e-01,  9.98517176e-01,  3.91145914e-09,
         9.98762801e-01, -9.44712685e-01,  9.98882295e-01,
         9.99167722e-01,  9.98365735e-01,  9.98539526e-01,
         9.99349674e-01,  9.98682774e-01,  9.90282263e-01],
       [ 9.99032878e-01,  9.99191149e-01,  9.95069722e-01,
         9.98663753e-01,  9.41768971e-01,  9.97886353e-01,
         9.99012700e-01,  9.98412389e-01,  9.98628992e-01,
         9.96945711e-01, -9.72152413e-01,  9.99092707e-01,
         9.99022688e-01,  9.98377797e-01,  9.98762801e-01,
         6.12438062e-09, -9.43278583e-01,  9.98714615e-01,
         9.98765094e-01,  9.97518255e-01,  9.98234814e-01,
         9.98833239e-01,  9.98556185e-01,  9.88600916e-01],
       [-9.44718270e-01, -9.45834544e-01, -9.40676110e-01,
        -9.44650667e-01, -8.57348147e-01, -9.39807793e-01,
        -9.45433385e-01, -9.40737501e-01, -9.42716179e-01,
        -9.41737281e-01,  9.49931280e-01, -9.43690714e-01,
        -9.44584256e-01, -9.41181012e-01, -9.44712685e-01,
        -9.43278583e-01,  1.85097555e-08, -9.42274581e-01,
        -9.43930225e-01, -9.44416759e-01, -9.44123084e-01,
        -9.43611879e-01, -9.43058469e-01, -9.20277725e-01],
       [ 9.99102498e-01,  9.99087732e-01,  9.96340223e-01,
         9.98960337e-01,  9.46361648e-01,  9.97323488e-01,
         9.99002384e-01,  9.99081172e-01,  9.99193054e-01,
         9.97547921e-01, -9.70349967e-01,  9.99236560e-01,
         9.99076968e-01,  9.99085880e-01,  9.98882295e-01,
         9.98714615e-01, -9.42274581e-01,  4.63172335e-10,
         9.99055447e-01,  9.96678367e-01,  9.97947641e-01,
         9.99023756e-01,  9.98655609e-01,  9.90680163e-01],
       [ 9.99273586e-01,  9.99237110e-01,  9.96354345e-01,
         9.99311633e-01,  9.43788045e-01,  9.98086971e-01,
         9.99391574e-01,  9.98609560e-01,  9.99051762e-01,
         9.96623630e-01, -9.74543996e-01,  9.99125265e-01,
         9.99242844e-01,  9.98417332e-01,  9.99167722e-01,
         9.98765094e-01, -9.43930225e-01,  9.99055447e-01,
         1.49968419e-08,  9.98019738e-01,  9.98407433e-01,
         9.99222857e-01,  9.98652394e-01,  9.89226980e-01],
       [ 9.97964072e-01,  9.98261304e-01,  9.94003174e-01,
         9.97876202e-01,  9.35138095e-01,  9.96890683e-01,
         9.98227196e-01,  9.96732620e-01,  9.97592295e-01,
         9.95604803e-01, -9.77042256e-01,  9.97720253e-01,
         9.98014936e-01,  9.95895305e-01,  9.98365735e-01,
         9.97518255e-01, -9.44416759e-01,  9.96678367e-01,
         9.98019738e-01,  7.47650147e-10,  9.97617693e-01,
         9.97870740e-01,  9.97367170e-01,  9.86577350e-01],
       [ 9.98809893e-01,  9.98920402e-01,  9.96112855e-01,
         9.98462419e-01,  9.43924294e-01,  9.97306126e-01,
         9.98655866e-01,  9.98290946e-01,  9.98279757e-01,
         9.96053414e-01, -9.72510826e-01,  9.98657360e-01,
         9.98393894e-01,  9.98089538e-01,  9.98539526e-01,
         9.98234814e-01, -9.44123084e-01,  9.97947641e-01,
         9.98407433e-01,  9.97617693e-01,  9.94482237e-10,
         9.98596112e-01,  9.98000736e-01,  9.89489744e-01],
       [ 9.99306302e-01,  9.99254574e-01,  9.96745892e-01,
         9.99263944e-01,  9.46696871e-01,  9.98328683e-01,
         9.99450287e-01,  9.98808945e-01,  9.99206541e-01,
         9.96252977e-01, -9.72753685e-01,  9.99322811e-01,
         9.99093343e-01,  9.98786233e-01,  9.99349674e-01,
         9.98833239e-01, -9.43611879e-01,  9.99023756e-01,
         9.99222857e-01,  9.97870740e-01,  9.98596112e-01,
         7.44695142e-09,  9.99016834e-01,  9.90734007e-01],
       [ 9.98670142e-01,  9.98828941e-01,  9.95997518e-01,
         9.98810150e-01,  9.46932752e-01,  9.98019225e-01,
         9.98871183e-01,  9.98467379e-01,  9.98709951e-01,
         9.96293594e-01, -9.70977647e-01,  9.98924819e-01,
         9.98535127e-01,  9.98273278e-01,  9.98682774e-01,
         9.98556185e-01, -9.43058469e-01,  9.98655609e-01,
         9.98652394e-01,  9.97367170e-01,  9.98000736e-01,
         9.99016834e-01,  1.79765233e-09,  9.91199840e-01],
       [ 9.89075401e-01,  9.88935866e-01,  9.89905446e-01,
         9.89492504e-01,  9.74895278e-01,  9.90401184e-01,
         9.89348747e-01,  9.92893798e-01,  9.91294961e-01,
         9.87014134e-01, -9.49332577e-01,  9.89982094e-01,
         9.88011557e-01,  9.92133050e-01,  9.90282263e-01,
         9.88600916e-01, -9.20277725e-01,  9.90680163e-01,
         9.89226980e-01,  9.86577350e-01,  9.89489744e-01,
         9.90734007e-01,  9.91199840e-01,  9.41720628e-08]]))
         
N = 24
model = GEKKO(remote=False)
wesg = model.Array(model.Var, N, value = 1/N, lb=0, ub=1)
model.Equation(m.sum(wesg) == 1)

def obj(rf = 0.02):
    esg_portfo = 0
    for i in range(N):
        esg_portfo += model.Intermediate(wesg[i] * ((esg_scores_df["Score 2019"][i] + esg_scores_df["Score 2020"][i])/2))


    return_portfo = 0
    for i in range(N):
        return_portfo += model.Intermediate(wesg[i]*((predicted_return_dataframe.iloc[0 , i] + r.iloc[0 ,i])/2))

    sigma_portfo = 0
    for i in range(N):
        for j in range(N):
            sigma_portfo += model.Intermediate(wesg[i] * ((sigma.iloc[i,j] + sigma_bar.iloc[i,j])/2) * wesg[j])


    return -esg_portfo * ((return_portfo - rf)/sigma_portfo)

model.Minimize(obj())
model.solve(disp=True)
wesg = np.array( [item[0] for item in wesg], dtype=float)
print(wesg)  
print(sum(wesg))

Thanks for the well-written question and for sharing the application.

Upvotes: 1

Related Questions