As a follow up to the question: How can I simplify a large scale NLP model in Gekko Python? I'm still trying to figure out why gekko gets me this error:
Memory allocation failed
Error: 'results.json' not found. Check above for additional error details
These are my constraints:
def contraintesPuissance(self):
Pmin = self.df_donnees_techniques["Puissance min"].to_list()
Pmax = self.df_donnees_techniques["Puissance max"].to_list()
self.model.Equations(
[
[
self.on_off_var[ idx + (heure*self.nb_actifs) ] \
* Pmax[idx] / self.getRendement(idx,heure) \
- self.variables[ idx + (heure*self.nb_actifs) ] >= 0,
self.variables[ idx + (heure*self.nb_actifs) ] \
- self.on_off_var[ idx + (heure*self.nb_actifs) ] \
* Pmin[idx] / self.getRendement(idx,heure) >= 0
]
for heure in range(self.nb_heure)
for idx in range(self.nb_actifs)
]
)
def contraintesBesoinsConsommation(self):
self.model.Equations(
[
[
sum([self.variables[idx + (heure*self.nb_actifs)]*self.getRendement(idx,heure) for idx in range(self.nb_actifs)]) \
- self.Analyse_df['besoins_chaud'][heure] == 0
]
for heure in range(self.nb_heure)
]
)
def contraintesTxENR(self):
intermed = [self.model.Intermediate(
self.variables[ idx + (heure*self.nb_actifs) ] * self.getRendement(idx,heure)
) for heure in range(self.nb_heure) for idx in range(self.nb_actifs)
]
numerateur = self.model.sum(
[intermed[idx + (heure*self.nb_actifs)] * self.getTaux(idx) for heure in range(self.nb_heure) for idx in range(self.nb_actifs)]
)
denominateur = self.model.sum(intermed)
self.model.Equation( numerateur / denominateur - self.Tx_ENR_cible >= 0)
def contrainteEmissions(self):
self.model.Equation( self.VLE_max_gaz - self.emissions("Gaz_1") >= 0 )
# !! à arrêter
And this is my objective function:
def func_cout_NRJV2_gekko(self):
somme = [
sum([self.variables[ idx + (heure*self.nb_actifs) ] * self.donnees_prix_NRJ[self.actifs_instancies[idx]][heure] for idx in range(self.nb_actifs)])
for heure in range(self.nb_heure)]
[self.model.Minimize(s) for s in somme]
penalite = self.model.if3(self.Sum_NRJ("Bois") - self.take_or_pay_bois, self.penalite_bois, 0) # Penalité take or pay
self.model.Minimize(penalite)
If more info is needed, I can provide it, but the code is really big.