Passer au contenu principal
eFleet évalue des stratégies de remplacement pour des besoins individuels de véhicules. Le chemin actif est run.py → inputs.py → fleet_results.py → outputs.py.

Domaine et unités

Un FleetNeed.key identifie un besoin de service : région, établissement, distance annuelle, heures de ralenti, sous-type et véhicule initial. Chaque besoin représente un véhicule, sans pondération d’échantillon. Les options d’acquisition décrivent ICE, BEV et PHEV. Distance, rendement, seuil kilométrique et entretien doivent employer la même unité. Aucune conversion kilomètres/milles n’est faite. La division des émissions par 10610^6 suppose des facteurs en grammes. Les séries monétaires sont additionnées sans conversion de devise ni inflation.

Classeur et valeurs par défaut

Les feuilles requises sont Inputs, Annual Inputs, Global Data, Vehicle Specs, EV Availability, Maintenance Costs, Basic Fleet Info et les trois Replacement Costs (ICE), (BEV), (PHEV). Inputs lit StartYear, EndYear, Horizon, GHG_Penalty et NumPHEV_Cycles. Les colonnes annuelles reconnues par Y?2... acceptent des années et des noms comme Y2026. La région all fournit les prix, intensités et valeurs carbone de repli. Le choix d’une série régionale dépend de sa première année de coût; les valeurs absentes ultérieures ne sont pas complétées individuellement. L’importateur utilise 250 jours travaillés : son test WorkingDays sur des noms déjà convertis en minuscules empêche la substitution attendue avec les en-têtes usuels. La construction programmatique de FleetNeed utilise 365 jours par défaut. Les deux parcours ne sont donc pas équivalents. Les multiplicateurs de pénalité sont 1,035 pour l’âge et le kilométrage, et 1,01 pour ICE. L’affectation globale early_rep évalue bool("EarlyRep_Allowed"), toujours vrai; la sélection vérifie l’autorisation propre au besoin. ghg_penalty et phev_cycles sont lus mais ne multiplient pas l’énergie annuelle dans _calc_usage_costs.

Années

Les coûts vont de start_year à horizon + max_ret_age, inclusivement. Les indicateurs d’achat incluent horizon, mais les décisions parcourent range(start_year, horizon) et excluent cette dernière année. end_year détermine le début de la pénalité ICE après étude. La comparaison additionne les coûts sur toute la série, sans actualisation.

Énergie et coûts d’utilisation

Poser d=D/Wd=D/W, i=I/Wi=I/W et la demande électrique quotidienne non contrainte Ed=de+ieiE_d=de+ie_i.
  • ICE : Ed=0E_d=0 et Fd=df+ifiF_d=df+if_i.
  • BEV : Fd=0F_d=0; toute la demande électrique est desservie même au-delà de la capacité de batterie. La disponibilité de recharge ne limite pas la faisabilité dans ce calcul.
  • PHEV : si B>EdB>E_d, conduite et ralenti sont électriques. Sinon, avec B>0B>0, poser Ed=BE_d=B, de=(B−iei)/ed_e=(B-ie_i)/e, df=d−ded_f=d-d_e et Fd=dffF_d=d_ff si df>0d_f>0. Le ralenti reste électrique. Une batterie non positive provoque une erreur.
L’égalité suit la branche limitée par la batterie. La distance électrique n’est pas bornée à zéro si le ralenti dépasse la batterie. Distance et jours positifs, rendements non nuls et cohérence batterie/ralenti sont nécessaires; leur validation n’est pas exhaustive. Ey=WEd,Fy=WFd,Cyenergy=W(Edpye+Fdpyf)E_y=WE_d,\quad F_y=WF_d,\quad C^{energy}_y=W(E_dp^e_y+F_dp^f_y) Avec a=de/da=d_e/d, l’entretien non ICE vaut D[amBEV+(1−a)mICE]D[am_{BEV}+(1-a)m_{ICE}]; ICE utilise DmICEDm_{ICE}. Gy=W(Edgye+Fdgyf)106,Cycarbon=GycyG_y=\frac{W(E_dg^e_y+F_dg^f_y)}{10^6},\qquad C^{carbon}_y=G_yc_y

Retraite et pénalités synthétiques

Le cycle récurrent est L=min⁡(⌊Mret/D⌋,Aret)L=\min(\lfloor M_{ret}/D\rfloor,A_{ret}). L’admissibilité initiale utilise le minimum entre l’âge restant et max⁡(0,⌈(Mret−M0)/D⌉)\max(0,\lceil(M_{ret}-M_0)/D\rceil). Un achat réinitialise l’échéancier. Un cycle nul rend la division de pénalité invalide. L’âge de pénalité est ay=y−yvehicle+1a_y=y-y_{vehicle}+1; le kilométrage augmente depuis la valeur initiale. Les dépassements utilisent strictement >. Avec uyu_y indiquant le dépassement d’au moins un seuil, vy,zyv_y,z_y les multiplicateurs d’âge/kilométrage applicables et CyC_y le coût de remplacement de même motorisation : Pyret=max⁡t(Ctut)LvyzyuyP^{ret}_y=\frac{\max_t(C_tu_t)}{L}v_yz_yu_y Pour ICE, jy=1[y>end_year]kICEj_y=\mathbf1[y>end\_year]k_{ICE} et : b=max⁡(max⁡t(CtEVjt)−max⁡t(Ctjt),0)LkICE,Py=Pyret+bjyb=\frac{\max(\max_t(C^{EV}_tj_t)-\max_t(C_tj_t),0)}{L}k_{ICE},\qquad P_y=P^{ret}_y+bj_y La référence électrique est BEV, sinon PHEV. Ces pénalités influencent le choix sans constituer une dépense réelle. Le multiplicateur ICE répété appartient au calcul implémenté.

Sélection annuelle

Initialiser la stratégie de conservation, puis les essais de remplacement de même motorisation et de motorisations alternatives. Pour chaque année, actualiser les coûts d’achat, d’utilisation et de pénalité en conservant les décisions précédemment acceptées. L’économie candidate est : Sn=∑y(Cn,ycurrent−Cn,ytrial)S_n=\sum_y(C^{current}_{n,y}-C^{trial}_{n,y}) total_cost_mat comprend investissement, énergie, entretien, carbone et pénalités. Trier les besoins et parcourir les économies en ordre décroissant. Acheter seulement si l’économie est strictement positive, le remplacement anticipé ou dû est autorisé, et les plafonds permettent l’achat. Les égalités suivent l’ordre NumPy sans règle métier explicite. Le plafond global est round(pourcentage × nombre / 100). Le plafond par sous-type suit cette règle sauf qu’une valeur brute positive inférieure à un devient un; zéro reste zéro. Sans plafond global, la limite égale la taille de la flotte. Il s’agit d’un classement annuel glouton, pas d’une optimisation simultanée pluriannuelle.

Validation des séries d’entrée

check_inputs exige prix/intensités des combustibles, limites par sous-type et prix d’acquisition jusqu’à une année après la dernière année de coût, soit horizon + max_ret_age + 1. Le calcul d’utilisation s’arrête une année plus tôt. Une limite par sous-type absente journalise une erreur et poursuit via AttributeError; une série trop courte provoque ValueError. Un kilométrage initial manquant devient zéro avec avertissement.

Sorties et validation

StudyResults.replacement_strategies contient les matrices véhicule × année de coûts, carburant, électricité, émissions et pénalités, ainsi que les achats/remplacements et les options. no_penalty_cost_mat exclut les pénalités. Les rapports comprennent résumés, plans de remplacement, coûts/émissions et énergie de recharge par établissement. Cette dernière est en kWh annuels, pas en puissance de borne ni en profil horaire. Exemple BEV : D=20 000D=20\,000, I=100I=100, W=250W=250, e=0.2e=0.2, ei=1e_i=1 donnent 4 100 kWh/an. À 0,15 monnaie/kWh, le coût est 615/an. À 100 g/kWh, les émissions sont 0,41 tCO2e/an. Ces valeurs ne sont pas des défauts. Contrôler énergie, coûts réels séparés des pénalités, arrondis des plafonds, bornes annuelles, échéanciers et reproductibilité de l’ordre. Les tests couvrent utilisation, économies, plafonds et pénalités. Des options d’acquisition absentes provoquent des erreurs explicites; des colonnes manquantes, divisions par zéro ou années incompatibles peuvent échouer directement dans pandas ou l’arithmétique.