muse2/simulation/
update.rsuse super::optimisation::Solution;
use super::CommodityPrices;
use crate::agent::AssetPool;
use crate::commodity::Commodity;
use log::info;
use std::collections::{HashMap, HashSet};
use std::rc::Rc;
pub fn update_commodity_flows(_solution: &Solution, _assets: &mut AssetPool) {
info!("Updating commodity flows...");
}
pub fn update_commodity_prices(
commodities: &HashMap<Rc<str>, Rc<Commodity>>,
solution: &Solution,
prices: &mut CommodityPrices,
) {
info!("Updating commodity prices...");
let commodities_updated = update_commodity_prices_from_solution(solution, prices);
let remaining_commodities = commodities
.keys()
.filter(|id| !commodities_updated.contains(*id))
.cloned();
update_remaining_commodity_prices(remaining_commodities, prices);
}
fn update_commodity_prices_from_solution(
solution: &Solution,
prices: &mut CommodityPrices,
) -> HashSet<Rc<str>> {
info!("Updating commodity prices...");
let mut commodities_updated = HashSet::new();
for (commodity_id, price) in solution.iter_commodity_prices() {
prices.insert(Rc::clone(commodity_id), price);
commodities_updated.insert(Rc::clone(commodity_id));
}
commodities_updated
}
fn update_remaining_commodity_prices<I>(_commodity_ids: I, _prices: &mut CommodityPrices)
where
I: Iterator<Item = Rc<str>>,
{
info!("Updating remaining commodity prices...");
}