Files
boc/iom/intelligence/__pycache__/simulation_engine.cpython-39.pyc
T

82 lines
8.8 KiB
Plaintext
Raw Normal View History

a
þY>j*4ã@sjdZddlmZmZmZddlmZddlmZeGdddƒƒZGdddƒZ d d
Z
e d krfe
ƒd S)
zD
Simulation Engine (Digital Twin 2.0)
Simulates "what if" scenarios
é)ÚDictÚListÚOptional)Ú dataclass)Údatetimec@sLeZdZUdZeed<eed<eed<eed<eeed<edœdd „Zd
S) ÚSimulationResultzResult of a simulationÚ
scenario_nameÚbaselineÚ simulatedÚchangesÚimpacted_indexes©ÚreturncCs|j|j|j|j|jdœS)N)Úscenarior r
r r ©rr r
r r ©Úself©rúE/home/bernt/.openclaw/workspace/iom/intelligence/simulation_engine.pyÚto_dicts ûzSimulationResult.to_dictN) Ú__name__Ú
__module__Ú __qualname__Ú__doc__ÚstrÚ__annotations__rrrrrrrr s
 rc@seZdZdZddZedœddZeeefee dœdd „Z
eeefe eed
œd d Z eeefeeed
œddZ
eee edœddZdS)ÚSimulationEnginezSimulates urban scenarioscCs| ¡|_dS)N)Ú_load_impact_modelsÚ
impact_modelsrrrrÚ__init__!szSimulationEngine.__init__r
c Cddddddœddd œd
d d dd
dœddd œdddddddœddd œddd d ddœddd œdddd dd œd!dd œd"ddd dd d#œd$d%d œd&œS)'z*Load models for how changes affect indexeszAdd dedicated bicycle lanesé(é
éûÿÿÿéýÿÿÿ)Úbicycle_friendlinessÚ walkabilityÚtraffic_intensityÚ noise_leveliðIé)Ú descriptionr Úcost_estimate_usdÚimplementation_monthszRemove on-street parkingééiöÿÿÿ)r%Úpedestrian_flowÚretail_densityr&iPÃézPlant 40 new treesiñÿÿÿéé)Ú
tree_coverageÚ heat_stressÚ shade_indexr%Úproperty_valuei€8é zUpgrade street lighting to LEDé)ÚlightingÚ safety_indexÚnight_activityZenergy_efficiencyiÀÔézAdd children's playgroundé#é)Úfamily_presenceÚgreeneryZcommunity_activityr6i@
z!Convert ground floor to mixed-use)r/Z public_lifer.Úfunctional_densityr6i ¡é)Úadd_bike_lanesZremove_parkingÚplant_40_treesÚimprove_lightingÚadd_playgroundZmixed_use_developmentrrrrrr$srü÷ü÷ûöü÷ü÷ûö¼z$SimulationEngine._load_impact_models)Ú
current_staterrc C|j |¡}|s"t|||igdS| ¡}i}|d ¡D]N\}}||vr:||}tdtd||ƒƒ} | ||<|| t| |dƒdœ||<q:| ||¡}
t|||||
dS)
Simulate a scenario
Args:
current_state: Current signal values
scenario_name: Name of scenario to simulate
Returns:
Simulation result
rr édré)ÚoldÚnewÚdelta) rÚgetrÚcopyÚitemsÚminÚmaxÚroundÚ_calculate_impacted_indexes) rrGrÚmodelZsimulated_stater ÚsignalrLÚ old_valueÚ new_valueÚimpactedrrrÚsimulatexs8 û  ý  ûzSimulationEngine.simulate)rGÚ scenariosrc Cg}|D]r}| ||¡}|j |i¡}tdd|j ¡Dƒƒ}| || dd¡t|dƒ| dd¡| dd¡|j|jd œ¡q|j d
d d d
|||r¢|ddnddœS)zCompare multiple scenarioscss"|]}|ddkr|dVqdS)rLrNr)Ú.0ÚcrrrÚ <genexpr>¸s ÿz5SimulationEngine.compare_scenarios.<locals>.<genexpr>r)ÚrIr*rr+)rr)Útotal_improvementÚcost_usdr+r r cSs|dS)Nr_r©ÚxrrrÚ<lambda>Èóz4SimulationEngine.compare_scenarios.<locals>.<lambda>T©ÚkeyÚreverserN)r rZÚ
best_scenario)
rYrrMÚsumr ÚvaluesÚappendrRr Úsort)rrGrZÚresultsrÚresultrTr_rrrÚcompare_scenarios«s* ÿ


ù
ýz"SimulationEngine.compare_scenarios)rGÚ target_indexÚ
budget_usdrc Cs,g}|j ¡D]z\}}| dtdƒ¡|kr| ||¡}d}|jD]} | d|kr@| d}q^q@| ||d||t|ddƒddœ¡q|jd d
d d g}
|} |D]&} | d
| kr¨|
 | ¡| | d
8} q¨t dd|
Dƒƒ}
t dd|
Dƒƒ}||dd|
Dƒ|
t
|dƒ| t
|t|
dƒddƒdœS)
Find optimal combination of interventions within budget
Example:
"Maximize family-friendly within $300k budget"
r*ÚinfrÚ
index_nameÚ improvementrIi †)rÚcostÚtarget_improvementÚroicSs|dS)Nrwrrarrrrcòrdz+SimulationEngine.optimize.<locals>.<lambda>Trerucss|]}|dVqdS)ruNr©r[Úsrrrr]ýrdz,SimulationEngine.optimize.<locals>.<genexpr>css|]}|dVqdS)rvNrrxrrrr]þrdcSsg|] }|dqS)rrrxrrrÚ
<listcomp>rdz-SimulationEngine.optimize.<locals>.<listcomp>é)rprqÚselected_scenariosÚ
total_costr_Úremaining_budgetÚ
efficiency) rrOrMÚfloatrYr rkrQrlrirR)rrGrprqZ
affordablerrTrnrvÚidxÚselectedr~Úoptionr}r_rrrÚoptimizeÐs@
 
 ü
 
 ùzSimulationEngine.optimize)r r
rc
s†g}gd¢}tfdd|Dƒƒt|ƒ}tfdd|Dƒƒt|ƒ}t||ƒdkr| dt|dƒt|dƒt||dƒdœ¡gd¢}tfd d|Dƒƒt|ƒ}tfd
d|Dƒƒt|ƒ} t| |ƒdkr| d t|dƒt| dƒt| |dƒdœ¡gd ¢}
tfd
d|
Dƒƒt|
ƒ} tfdd|
Dƒƒt|