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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions