From 86703213139e70dc849775a61f3a44ccdb8623cc Mon Sep 17 00:00:00 2001 From: Cole Blanchard Date: Mon, 30 Sep 2024 09:11:45 -0400 Subject: [PATCH 1/4] weighted interventions --- .../components/widgets/tera-signal-bars.vue | 86 +++++++++++++++++++ .../optimize-ciemss-operation.ts | 4 +- .../tera-optimize-ciemss-drilldown.vue | 12 ++- .../tera-optimize-ciemss-node.vue | 2 - .../tera-static-intervention-policy-group.vue | 15 ++-- 5 files changed, 104 insertions(+), 15 deletions(-) create mode 100644 packages/client/hmi-client/src/components/widgets/tera-signal-bars.vue diff --git a/packages/client/hmi-client/src/components/widgets/tera-signal-bars.vue b/packages/client/hmi-client/src/components/widgets/tera-signal-bars.vue new file mode 100644 index 0000000000..54ec4a57f6 --- /dev/null +++ b/packages/client/hmi-client/src/components/widgets/tera-signal-bars.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/packages/client/hmi-client/src/components/workflow/ops/optimize-ciemss/optimize-ciemss-operation.ts b/packages/client/hmi-client/src/components/workflow/ops/optimize-ciemss/optimize-ciemss-operation.ts index feb9f9e38b..dca05a4bd2 100644 --- a/packages/client/hmi-client/src/components/workflow/ops/optimize-ciemss/optimize-ciemss-operation.ts +++ b/packages/client/hmi-client/src/components/workflow/ops/optimize-ciemss/optimize-ciemss-operation.ts @@ -33,7 +33,7 @@ export interface InterventionPolicyGroupForm { lowerBoundValue: number; upperBoundValue: number; initialGuessValue: number; - isActive: boolean; + relativeImportance: number; optimizationType: OptimizationInterventionObjective; objectiveFunctionOption: InterventionObjectiveFunctions; intervention: Intervention; @@ -100,7 +100,7 @@ export const blankInterventionPolicyGroup: InterventionPolicyGroupForm = { lowerBoundValue: 0, upperBoundValue: 0, initialGuessValue: 0, - isActive: true, + relativeImportance: 5, optimizationType: OptimizationInterventionObjective.startTime, objectiveFunctionOption: InterventionObjectiveFunctions.initialGuess, intervention: blankIntervention diff --git a/packages/client/hmi-client/src/components/workflow/ops/optimize-ciemss/tera-optimize-ciemss-drilldown.vue b/packages/client/hmi-client/src/components/workflow/ops/optimize-ciemss/tera-optimize-ciemss-drilldown.vue index 5637168c3f..b88a236601 100644 --- a/packages/client/hmi-client/src/components/workflow/ops/optimize-ciemss/tera-optimize-ciemss-drilldown.vue +++ b/packages/client/hmi-client/src/components/workflow/ops/optimize-ciemss/tera-optimize-ciemss-drilldown.vue @@ -518,9 +518,13 @@ const outputPanel = ref(null); const chartSize = computed(() => drilldownChartSize(outputPanel.value)); const cancelRunId = computed(() => props.node.state.inProgressPostForecastId || props.node.state.inProgressOptimizeId); -const activePolicyGroups = computed(() => knobs.value.interventionPolicyGroups.filter((ele) => ele.isActive)); +const activePolicyGroups = computed(() => + knobs.value.interventionPolicyGroups.filter((ele) => ele.relativeImportance > 5) +); -const inactivePolicyGroups = computed(() => knobs.value.interventionPolicyGroups.filter((ele) => !ele.isActive)); +const inactivePolicyGroups = computed(() => + knobs.value.interventionPolicyGroups.filter((ele) => ele.relativeImportance <= 5) +); let pyciemssMap: Record = {}; const showSpinner = computed( @@ -712,11 +716,11 @@ const setInterventionPolicyGroups = (interventionPolicy: InterventionPolicy) => knobs.value.interventionPolicyGroups = []; // Reset prior to populating. if (interventionPolicy.interventions && interventionPolicy.interventions.length > 0) { interventionPolicy.interventions.forEach((intervention) => { - const isNotActive = intervention.dynamicInterventions?.length > 0 || intervention.staticInterventions?.length > 1; + // const isNotActive = intervention.dynamicInterventions?.length > 0 || intervention.staticInterventions?.length > 1; const newIntervention = _.cloneDeep(blankInterventionPolicyGroup); newIntervention.id = interventionPolicy.id; newIntervention.intervention = intervention; - newIntervention.isActive = !isNotActive; + newIntervention.relativeImportance = 5; newIntervention.startTimeGuess = intervention.staticInterventions[0]?.timestep; newIntervention.initialGuessValue = intervention.staticInterventions[0]?.value; knobs.value.interventionPolicyGroups.push(newIntervention); diff --git a/packages/client/hmi-client/src/components/workflow/ops/optimize-ciemss/tera-optimize-ciemss-node.vue b/packages/client/hmi-client/src/components/workflow/ops/optimize-ciemss/tera-optimize-ciemss-node.vue index 8165ba33d7..2b7958ee01 100644 --- a/packages/client/hmi-client/src/components/workflow/ops/optimize-ciemss/tera-optimize-ciemss-node.vue +++ b/packages/client/hmi-client/src/components/workflow/ops/optimize-ciemss/tera-optimize-ciemss-node.vue @@ -239,8 +239,6 @@ watch( The following are the key attributes and findings of an optimization process for a ODE epidemilogy model, the goal is to find the best values or time points that satisfy a set of constraints. - The succss constraints are, in JSON: ${JSON.stringify(state.constraintGroups)} -- We want to optimize: ${JSON.stringify(state.interventionPolicyGroups.filter((d) => d.isActive === true))} -- The fixed/static intervenations: ${JSON.stringify(state.interventionPolicyGroups.filter((d) => d.isActive === false))} - The best guesses are: ${optimizationResult.x} - The result is ${optimizationResult.success} diff --git a/packages/client/hmi-client/src/components/workflow/ops/optimize-ciemss/tera-static-intervention-policy-group.vue b/packages/client/hmi-client/src/components/workflow/ops/optimize-ciemss/tera-static-intervention-policy-group.vue index 7d2cc48d74..2897ab70b1 100644 --- a/packages/client/hmi-client/src/components/workflow/ops/optimize-ciemss/tera-static-intervention-policy-group.vue +++ b/packages/client/hmi-client/src/components/workflow/ops/optimize-ciemss/tera-static-intervention-policy-group.vue @@ -2,12 +2,13 @@
{{ config.intervention?.name ?? `Intervention` }}
-
- - -
+
-