Running Optimization
This guide shows how to run an optimization scenario with ws3.
Prerequisites
A loaded ForestModel
Understanding of linear programming concepts
Procedure
1. Load the model
from ws3.forest import ForestModel
fm = ForestModel(
model_name="my_model",
model_path="path/to/model",
base_year=2020,
horizon=10,
period_length=10
)
fm.import_areas_section()
fm.import_yields_section()
fm.import_actions_section()
fm.import_transitions_section()
fm.initialize_areas()
fm.add_null_action()
fm.reset_actions()
2. Create a Problem
from ws3.opt import Problem
problem = Problem(
name="base_scenario",
sense=1, # SENSE_MAXIMIZE
solver="highs"
)
3. Define the objective
coeffs = {var_name: 1.0 for var_name in problem.var_names()}
problem.z(coeffs)
4. Add constraints
problem.add_constraint(
name="even_flow",
coeffs={var_name: 1.0 if "period_0" in var_name else -1.2
for var_name in problem.var_names()},
sense="<=",
rhs=0.0
)
5. Solve
problem.solve(verbose=True)
6. Inspect results
solution = problem.solution()
print(f"Objective value: {problem.z()}")
print(f"Variables: {len(solution)}")
Troubleshooting
Solver fails to converge — verify all development types and actions are defined and constraint ranges are feasible.
No harvest in schedule — check that actions are applicable to development types and that area constraints allow harvest.
Solver takes too long — reduce the planning horizon or simplify constraints.