Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add support for deactivating slacks through UI #73

Merged
merged 11 commits into from
Jul 29, 2024
4 changes: 2 additions & 2 deletions backend/app/internal/pareto_stategic_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,9 @@ def run_strategic_model(input_file, output_file, id, modelParameters, overrideVa
optimality_gap = int(modelParameters["optimalityGap"])/100
except:
optimality_gap = 0
# _log.info(f'optimality gap is {optimality_gap}')
# _log.info(f'deactivating slacks: {modelParameters["deactivate_slacks"]}')
options = {
"deactivate_slacks": True,
"deactivate_slacks": modelParameters["deactivate_slacks"],
"scale_model": modelParameters["scale_model"],
"scaling_factor": 1000,
"running_time": modelParameters["runtime"],
Expand Down
1 change: 1 addition & 0 deletions backend/app/routers/scenarios.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,7 @@ async def run_model(request: Request, background_tasks: BackgroundTasks):
"desalination_model": optimizationSettings.get("desalination_model", "false"),
"infrastructure_timing": optimizationSettings.get("infrastructure_timing", "false"),
"subsurface_risk": optimizationSettings.get("subsurface_risk", "false"),
"deactivate_slacks": optimizationSettings.get("deactivate_slacks", True),
}

_log.info(f"modelParameters: {modelParameters}")
Expand Down
15 changes: 11 additions & 4 deletions electron/ui/src/views/Optimization/AdvancedOptions.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ export const advancedOptions = {
}
},
pipeline_cost: {
displayName: "Pipeline Capacity",
displayName: "Pipeline Cost",
defaultValue: "distance_based",
options: {
"Distance-based": "distance_based",
"Capacity-based": "capacity_based"
"Distance based": "distance_based",
"Capacity based": "capacity_based"
MichaelPesce marked this conversation as resolved.
Show resolved Hide resolved
}
},
node_capacity: {
Expand All @@ -46,7 +46,6 @@ export const advancedOptions = {
"False": "false",
"Exclude Over/Under PW": "exclude_over_and_under_pressured_wells",
"Calculate Risk Metrics": "calculate_risk_metrics"

}
},
removal_efficiency_method: {
Expand All @@ -66,4 +65,12 @@ export const advancedOptions = {
"MD": "md"
},
},
deactivate_slacks: {
displayName: "Deactivate Slacks",
defaultValue: true,
options: {
"True": true,
"False": "false"
MichaelPesce marked this conversation as resolved.
Show resolved Hide resolved
},
},
}
23 changes: 15 additions & 8 deletions electron/ui/src/views/Optimization/Descriptions.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,40 +32,47 @@ export const descriptions = {
Select the solver you would like to use. Note: Gurobi requires a license.
If you do not have a Gurobi licence, select "CBC", an open source solver.
</div>,
scaleModel: <div>
scale_model: <div>
Choose whether you would like to scale the model or not.
</div>,

pipelineCapacity: <div>
pipeline_capacity: <div>
Alternate pipeline capacity selection:<br/>
-Input: use input for pipeline capacity<br/>
-Input: use pipeline capacities and rate in [currency/volume] to calculate pipeline capex costs<br/>
MichaelPesce marked this conversation as resolved.
Show resolved Hide resolved
-Calculated: calculate pipeline capacity from pipeline diameters</div>,
nodeCapacity: <div>
pipeline_cost: <div>
Alternate pipeline capex cost structures (distance or capacity based):<br/>
MichaelPesce marked this conversation as resolved.
Show resolved Hide resolved
-Capacity Based: use input for pipeline capacity<br/>
-Distance Based: use pipeline distances and rate in [currency/(diameter-distance)] to calculate pipeline capex costs</div>,
MichaelPesce marked this conversation as resolved.
Show resolved Hide resolved
node_capacity: <div>
Selection to include Node Capacity:<br/>
-True: Include network node capacity constraints<br/>
-False: Exclude network node capacity constraints
</div>,
infrastructureTiming: <div>
infrastructure_timing: <div>
Selection to include infrastructure timing:<br/>
-True: Include infrastructure timing in model<br/>
-False: Exclude infrastructure timing from model<br/>
Note that infrastructure timing calculations are performed post-optimization.
</div>,
subsurfaceRisk: <div>
subsurface_risk: <div>
Selection to include subsurface risk<br/>
-False: Exclude subsurface risk from model unless the subsurface risk objective function is selected<br/>
-Exclude Over/Under PW: Calculate subsurface risk metrics and disallow disposal to overpressured and underpressured wells<br/>
-Calculate Risk Metrics: Calculate subsurface risk metrics for the user to view, but don't change the optimization model
</div>,
removalEfficiencyMethod: <div>
removal_efficiency_method: <div>
Method for calculating removal efficiency<br/>
-Load based: use contaminant load (flow times concentration) to calculate removal efficiency<br/>
-Concentration based: use contaminant concentration to calculate removal efficiency
</div>,
desalinationModel: <div>
desalination_model: <div>
Selection to include surrogate model for desalination:<br/>
-False: Do not use surrogate model for desalination<br/>
-MVC: Use MVC (Mechanical Vapor Compressor) surrogate model<br/>
-MD: Use MD (Membrane Distillation) surrogate model
</div>,
deactivate_slacks: <div>
True to deactivate slack variables, False to use slack variables. Default is True<br/>
</div>,
}
45 changes: 8 additions & 37 deletions electron/ui/src/views/Optimization/Optimization.js
Original file line number Diff line number Diff line change
Expand Up @@ -264,49 +264,20 @@ export default function Optimization(props) {
</Grid>
<Grid item xs={columnWidths[1]} style={styles.gridItems}>
</Grid>

<Grid item xs={columnWidths[0]} style={styles.gridItems}>
<Collapse in={showAdvancedOptions} timeout="auto" unmountOnExit>
<Box sx={styles.settingName}>
<p>Scale Model</p>
<Tooltip title={descriptions.scaleModel} placement="right-start"><IconButton><InfoIcon fontSize='small'/></IconButton></Tooltip>
</Box>
<Box sx={styles.settingName}>
<p>Pipeline Capacity</p>
<Tooltip title={descriptions.pipelineCapacity} placement="right-start"><IconButton><InfoIcon fontSize='small'/></IconButton></Tooltip>
</Box>
<Box sx={styles.settingName}>
<p>Pipeline Cost</p>
<Tooltip title={descriptions.pipelineCost} placement="right-start"><IconButton><InfoIcon fontSize='small'/></IconButton></Tooltip>
</Box>
<Box sx={styles.settingName}>
<p>Node Capacity</p>
<Tooltip title={descriptions.nodeCapacity} placement="right-start"><IconButton><InfoIcon fontSize='small'/></IconButton></Tooltip>
</Box>
<Box sx={styles.settingName}>
<p>Infrastructure Timing</p>
<Tooltip title={descriptions.infrastructureTiming} placement="right-start"><IconButton><InfoIcon fontSize='small'/></IconButton></Tooltip>
</Box>
<Box sx={styles.settingName}>
<p>Subsurface Risk</p>
<Tooltip title={descriptions.subsurfaceRisk} placement="right-start"><IconButton><InfoIcon fontSize='small'/></IconButton></Tooltip>
</Box>
<Box sx={styles.settingName}>
<p>Removal Efficiency Method</p>
<Tooltip title={descriptions.removalEfficiencyMethod} placement="right-start"><IconButton><InfoIcon fontSize='small'/></IconButton></Tooltip>
</Box>
<Box sx={styles.settingName}>
<p>Desalination Model</p>
<Tooltip title={descriptions.desalinationModel} placement="right-start"><IconButton><InfoIcon fontSize='small'/></IconButton></Tooltip>
</Box>
MichaelPesce marked this conversation as resolved.
Show resolved Hide resolved
{
Object.entries(advancedOptions).map(([ key, data ]) => (
<Box key={key} sx={styles.settingName}>
<p>{data.displayName}</p>
<Tooltip title={descriptions[key]} placement="right-start"><IconButton><InfoIcon fontSize='small'/></IconButton></Tooltip>
</Box>
))
}
</Collapse>
</Grid>
<Grid item xs={columnWidths[1]} style={styles.gridItems}>
<Collapse in={showAdvancedOptions} timeout="auto" unmountOnExit>

{/*
advanced options:
*/}
{
Object.entries(advancedOptions).map(([ key, data ]) => (
<Box key={key}>
Expand Down