Skip to content

Add examples/guide without macros #86

@deanm0000

Description

@deanm0000

The macros are great for small problems but anything a bit bigger or dynamic needs the non-macro approach. Here's a snippet of something I just did, not sure if there's a better way.

    let mut vars = ProblemVariables::new();
    let to_grid = vars.add_vector(variable().min(0.0).max(grid_out), rows);
    let to_grid_ismax = vars.add_vector(variable().binary(), rows);
    let clip = vars.add_vector(variable().min(0.0).max(max_clip), rows);

    //soc balance rule
    let lhs = charge[0] * rte[0] - discharge[0];
    constraints.push(lhs.eq(soc[0]).set_name("soc_balance_rule_0".to_string()));
    (1..rows).into_iter().for_each(|t| {
        let lhs = soc[t - 1] + charge[t] * rte[t] - discharge[t];
        constraints.push(lhs.eq(soc[t]).set_name(format!("soc_balance_rule_{}", t)));
    });
    let objective = (0..rows).into_iter().fold(Expression::from(0), |acc, t| {
        acc + to_grid[t] * prices[t] - genr[t] * ppa_price + clip[t] * ppa_price
    });
    let mut solver = vars.maximise(objective).using(default_solver);

    for c in constraints {
        solver.add_constraint(c);
    }

    let solution = solver.solve()?;

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentation

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions