From 591faa32ecd405145f2e3cf6f6eacb9266d71420 Mon Sep 17 00:00:00 2001 From: Joe Ye Date: Mon, 10 Apr 2023 14:45:30 -0400 Subject: [PATCH 1/5] New models and solvers --- docs/active_set.rst | 81 ++ docs/covid.rst | 461 +++++++ docs/pgd.rst | 81 ++ docs/pgdss.rst | 89 ++ docs/san.rst | 59 + docs/smf.rst | 116 ++ simopt/models/covid.py | 2247 ++++++++++++++++++++++++++++++++++ simopt/models/san.py | 314 ++++- simopt/models/smf.py | 480 ++++++++ simopt/solvers/active_set.py | 593 +++++++++ simopt/solvers/pgd.py | 535 ++++++++ simopt/solvers/pgdss.py | 509 ++++++++ 12 files changed, 5560 insertions(+), 5 deletions(-) create mode 100644 docs/active_set.rst create mode 100644 docs/covid.rst create mode 100644 docs/pgd.rst create mode 100644 docs/pgdss.rst create mode 100644 docs/smf.rst create mode 100644 simopt/models/covid.py create mode 100644 simopt/models/smf.py create mode 100644 simopt/solvers/active_set.py create mode 100644 simopt/solvers/pgd.py create mode 100644 simopt/solvers/pgdss.py diff --git a/docs/active_set.rst b/docs/active_set.rst new file mode 100644 index 000000000..c210bd9a6 --- /dev/null +++ b/docs/active_set.rst @@ -0,0 +1,81 @@ +Solver: Active-set Method (ACTIVE-SET) +============================================================================================= + +Description: +------------ +The solver is dedicated for problems with linear constraints in the form of :math:`C_e x = de, C_i x \leq di`. +It employs the active-set method mentioned in Jorge Norcedal's Numerical Optimization. + +Modifications & Implementation: +------------------------------- + +**find_feasible_initial**: Find an initial feasible solution if one is not provided. + +**line_search**: A back-tracking line search method. + +**compute_search_direction**: Compute a search direction by solving a direction-finding quadratic subproblem at solution x. +It takes the index set of the active constraints (`W`), objective gradient at solution x (`g(x)`), and the concatenated constraint +coefficient matrix (`C`) as inputs and returns the optimal search direction along with the Lagrange multipliers of the active constraints. + +.. math:: + + \begin{align} + \min && (1/2)|| d ||^2+ g(x)^T d \\\\ + \text{s.t.} & C_k^T d = 0, \quad \forall k \in W \\ + \end{align} + +**_feasible**: Check whether a solution x is feasible to the problem. + +**finite_diff**: Approximate objective gradient using the finite difference method. + +Scope: +------ +* objective_type: single + +* constraint_type: box, deterministic (linear) + +* variable_type: continuous + +* gradient_observations: not available + +Solver Factors: +--------------- +* crn_across_solns: Use CRN across solutions? + + * Default: True + +* r: number of replications taken at each solution + + * Default: 30 + +* alpha: Tolerance for sufficient decrease condition. + + * Default: 0.2 + +* beta: Step size reduction factor in line search. + + * Default: 0.9 + +* alpha_max: Maximum step size + + * Default: 10.0 + +* lambda: Magnifying factor for r inside the finite difference function + + * Default: 2 + +* tol: Floating point tolerance for checking tightness of constraints + + * Default: 1e-7 + +* tol2: Floating point tolerance for checking closeness of dot product to zero + + * Default: 1e-7 + +* finite_diff_step: Step size for finite difference + + * Default: 1e-5 + +References: +=========== +Nocedal, J., & Wright, S. J. (2006). Numerical optimization (2nd ed.). Springer. \ No newline at end of file diff --git a/docs/covid.rst b/docs/covid.rst new file mode 100644 index 000000000..dd149832c --- /dev/null +++ b/docs/covid.rst @@ -0,0 +1,461 @@ +Model: COVID-19 Disease Progression with Testing and Vaccination (COVID) +================================================================= + +Description: +------------ +COVID-19 is a contagious respiratory disease with a high trasmission rate. A college campus implements +regular survelliance testing to identify, isolate, and reduce disease spread. However, the model can also +be generalized and simulated the interaction among any given groups of people. +The initial prevalance level of the disease is :math:`init_infect_percent`. The population is divided +into different groups with intra-group interaction matrix :math:`inter_rate`. There is a probability of :math:`p_trans` (or :math:`p_trans_vac`) +transmissions per interaction. The transmission rate per individual can be calculated by multiplying +:math:`inter_rate` by :math:`p_trans` (or :math:`p_trans_vac`). The disease progression for each individual follows the following semi-Markov process: + +.. image:: covid_test_compartments.png + :width: 400 + + +Clarifications: + +1. All recovered people will not be infected again; + +2. In the exposed state, people cannot infect others; during the infectious/asymptomatic state, people can infect other; + +3. Remove all infected individuals (except those in symptomatic state) to isolation if they are tested and have result of positive at each day; + +4. All individuals in symptomatic state will be isolated; + +5. For individuals in isolation state, assume they follow the same disease progression; + +6. Given being infected, the transmission probabilities for vaccinated and non-vaccinated individuals are different; + +7. Given being infected, receiving vaccination does influence the probability of being asymptomatic but not influence process of illness; + +8. Assume all the N vaccinations are received at the beginning of the cycle, and we do not consider multiple doses here; + +9. Assume all initial infectious people are unvaccinated; + +10. Assume all symptomatic people are isolated; + +11. Assume all testing happens at the end of the day. (i.e. people will be isolated at the end of the day); + +12. At day :math:`t`, for individuals who will transit to next the state in day :math:`t+1`, assume they will not be tested at day :math:`t` but at day :math:`t+1`; + +13. At the end of isolation, individuals will return to recovered state. + + +The simulation is generated as follows: + +1. For each day in :math:`n` and for each group :math:`g`, generate newly exposed individuals. + +2. At day :math:`t`, for each state, each group :math:`g`, consider the newly coming individuals and the remaining scheduled people: + + (a) Schedule for newly coming individuals: generate :math:`day_exp` number of days remaining in exposed and :math:`gen_exp_num` number of people who are going to move to infectious state at date :math:`day_exp + t`. + + (b) Generate isolation starting schedule for the scheduled exposed people: generate day :math:`day_move_iso_exp` and :math:`num_iso_exp` number of people who are going to move to isolation at date :math:`day_move_iso_exp + t`. + + (c) Remove the scheduled isolated people from the scheduled exposed group and the total exposed group. + + (d) At the end of :math:`day_exp + t`, the remaining scheduled exposed people are going to move to infectious. + + (e) Generate the schedule for exposed isolated people: generate :math:`day_exp_iso` number of days remaining in exposed state and :math:`gen_exp_num_iso` number of people who are going to move to infectious isolation state at date :math:`day_exp_iso + t`. + + (f) At the end of :math:`day_exp_iso + t`, the :math:`gen_exp_num_iso` number of isolated exposed individuals are going to move to infectious isolation state. + + (g) Schedule for newly coming individuals to infectious state: generate :math:`day_inf` number of days remaining in infectious and :math:`gen_inf_num` number of people who are going to move to symptomatic /asymptomatic state at date :math:`day_inf + t`. + + (h) Generate isolation starting schedule for the scheduled infectious people: generate day :math:`day_move_iso_inf` and :math:`num_iso_inf` number of people who are going to move to isolation at date :math:`day_move_iso_inf + t`. + + (i) Remove the scheduled isolated people from the scheduled infectious group and the total infectious group. + + (j) At the end of :math:`day_inf + t`, generate the number of asymptomatic people from the remaining scheduled infectious people, move them to asymptomatic state. Symptomatic people are all going to symptomatic isolation. + + (k) Generate the schedule for infectious isolated people: generate :math:`day_inf_iso` number of days remaining in infectious state and :math:`gen_inf_num_iso` number of people who are going to move to symptomatic /asymptomatic isolation state at date :math:`day_inf_iso + t`. + + (l) At the end of :math:`day_inf_iso + t`, generate the number of symptomatic and asymptomatic people from the :math:`gen_inf_num_iso` number of isolated infectious people, move them to symptomatic/asymptomatic isolation state. + + (m) Generate the schedule for symptomatic individuals: generate :math:`day_sym` number of days remaining in symptomatic state and :math:`gen_sym_num` number of people who are going to move to recover at date :math:`day_sym + t`. + + (n) Generate the schedule for asymptomatic individuals: generate :math:`day_asym ` number of days remaining in asymptomatic state and :math:`gen_asym_num` number of people who are going to move to recover at date :math:`day_asym + t`. + + (o) Generate isolation starting schedule for the scheduled asymptomatic people: generate day :math:`day_move_iso_asym` and :math:`num_iso_asym` number of people who are going to move to asymptomatic isolation state at date :math:`day_move_iso_asym + t`. + + (p) Remove the scheduled isolated asymptomatic people from the scheduled asymptomatic group and the total asymptomatic group. + + (q) At the end of :math:`day_asym + t`, the remaining scheduled asymptomatic people are going to move to recover state. + + (r) Generate the schedule for asymptomatic isolated individuals: generate :math:`day_asym_iso` number of days remaining in asymptomatic isolation state and :math:`gen_asym_num_iso` number of poeple who are going to recover at date :math:`day_asym_iso + t`. + + (s) At the end of :math:`day_asym_iso + t`, the remaining isolated asymptomatic people are going to move to recover state. + + +Sources of Randomness: +---------------------- +There are six sources of randomness. + +1. The number of newly exposed (non)vaccinated individuals on each day follows a Poisson distribution with mean equals transmission +rate times number of infected (infectious + symptomatic + asymptomatic) individuals times fraction of susceptible (non)vaccinated individuals. + + mean of new exposed people: + For vaccinated group: + :math:`new_exp_vac = p_trans_vac * iter_rate * number of infected and asymptomatic individuals * vac_sus/ (sum(group_size)- # isolated individuals)` + For non-vaccinated group: + :math:`new_exp_nonvac = p_trans * iter_rate * number of infected and asymptomatic individuals * non_vac_sus / (sum(group_size)- # isolated individuals)` + +2. For each day, assume individuals can only stay in exposed state for no longer than :math:`max_exp` days, the number of individuals move to infectious state follows multinomial distribution with :math:`n=#new_exp_(non)vac` +and :math:`p=[p_1, p_2, ..., p_max_exp]` with :math:`p_i` is the pmf of possion distribution with :math:`x=i` and normalize the sum of :math:`p` to be 1. + +3. For each day, assume individuals can only stay in infectious state for no longer than :math:`max_inf` days, the number of individuals move to (a)symptomatic state follows multinomial distribution with :math:`n=#new_inf_(non)vac` +and :math:`p=[p_1, p_2, ..., p_max_inf]` with :math:`p_i` is the pmf of possion distribution with :math:`x=i` and normalize the sum of :math:`p` to be 1. + +4. For each day, assume individuals can only stay in symptomatic state for no longer than :math:`max_symp` days, the number of individuals move to recover state follows multinomial distribution with :math:`n=#new_sym_(non)vac` +and :math:`p=[p_1, p_2, ..., p_max_sym]` with :math:`p_i` is the pmf of possion distribution with :math:`x=i` and normalize the sum of :math:`p` to be 1. + +5. For each day, assume individuals can only stay in asymptomatic state for no longer than :math:`max_asymp` days, the number of individuals move to recover state follows multinomial distribution with :math:`n=#new_asym_(non)vac` +and :math:`p=[p_1, p_2, ..., p_max_asym]` with :math:`p_i` is the pmf of possion distribution with :math:`x=i` and normalize the sum of :math:`p` to be 1. + +6. An exposed/infectious/asymptomatic individual in group :math:`g` has a probability :math:`freq_g` of being tested and moved to the isolated states. + +7. At day :math:`t`, for state exposed/infectious/asymptomatic, assume :math:`n_day` number of individuals are going to leave to next infected states at date :math:`t + day`, the number of individuals move to isolation state follows multinomial distribution with :math:`n=n_day` +and :math:`p=[p_0, p_1, ..., p_{day-1}]` with :math:`p_i = (freq_g)^i` for :math:`0 0` for each :math:`i`, +but there is an associated cost. Unlike the original san problem, we now want to minimize :math:`ET(\theta)`, +where :math:`T(\theta)` is the (random) duration of the longest path from :math:`a` +to :math:`i`. + +The objective function is convex in :math:`\theta`. An IPA estimator of the gradient +is also given in the code. + +Constraints: +------------ +We require that :math:`\theta_i > 0` for each :math:`i`. +Additionaly, we include another constraint to impose a lower bound to the sum of arc_means. +which is :math:`\sum_i \theta_i \geq sum\_lb` + +Problem Factors: +---------------- +* budget: Max # of replications for a solver to take. + + * Default: 10000 + +* arc_costs: Cost associated to each arc. + + * Default: (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) + +* sum_lb: The lower bound for sum of arc_means. + + * Default: 30.0 + +Fixed Model Factors: +-------------------- +* N/A + +Starting Solution: +------------------ +* initial_solution: (8,) * 13 + +Random Solutions: +----------------- +Use acceptance-rejection to sample each arc_mean uniformly from a lognormal distribution with +2.5- and 97.5-percentiles at 0.1 and 10 respectively such that the arc_mean remains on the feasible region. + +Optimal Solution: +----------------- +Unknown + Optimal Objective Function Value: --------------------------------- Unknown \ No newline at end of file diff --git a/docs/smf.rst b/docs/smf.rst new file mode 100644 index 000000000..7c23370c1 --- /dev/null +++ b/docs/smf.rst @@ -0,0 +1,116 @@ +Model: Stochastic Max Flow (smf) +======================================== +Description: +------------ +Consider a max-flow problem with source node :math:`s` +and sink node :math:`t` and each arc :math:`i` is associated +with a capacity :math:`C_i` + +An example of a network with 10 total nodes and 20 arcs is shown below + +.. image:: SMF_example.png + :alt: The SMF diagram has failed to display + :width: 500 + +Sources of Randomness: +---------------------- +Noise in reduction of arc capacity is multivariate normally distributed +with mean mean_noise and covariance matrix of cov_noise. +The capacity of arc i to the max-flow solver model would be :math:`1000*max(assigned\_capacities[i]-noise[i],0)`, it was scaled up 1000 times since the maxflow solver would only solve for integer flow + + +Model Factors: +--------------- +* num_nodes: Total number of nodes. + + * Default: 10 + +* arcs: List of arcs + + * Default: 20 arcs, [(S,1),(S,2),(S,3),(1,2),(1,4),(2,4),(4,2),(3,2),(2,5),(4,5),(3,6),(3,7),(6,5),(6,7),(5,8),(6,8),(6,t),(7,t),(8,t)] + +* source_index": Source node index + + * default: 0 + +* sink_index: Sink node index + + * default: 9 + +* assigned_capacities: Assigned capacity of each arc + + * default: [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5] + +* mean_noise: The mean noise in reduction of arc capacities + + * default: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + +* cov_noise: Covariance matrix of noise + + * default: Diagonal of 4, the rest 0 + +Responses: +---------- +* max_flow: the maximum flow from the source node S to the sink node t (scaled back down 1000 times) + + :math:`\sum_{(s,j) \in arcs} \nobreakspace \phi_si \nobreakspace / \nobreakspace 1000` + +References: +----------- +No reference + +Optimization Problem: Maximize system flow with random noice in capacity (SMF-1) +================================================================================ + +Decision Variables: +-------------------- +* assigned_capacities :math:`x_i` + +Objectives: +------------ +We want to maximize the expected max flow from the source node s to the sink node t. + +The maximum flow of the system, which is the objective function can then be represented +by the total flow out from the source node, which is + +:math:`f(\phi) = \sum_{(s,i) \in arcs}\nobreakspace \ \phi_si` + +Constraints: +------------ + +* We constrain the total capacity to be allocated over the arcs to be :math:`b` + + * :math:`\sum_{(i,j) \in arcs} \nobreakspace x_ij \nobreakspace\leq \nobreakspace b` + + * :math:`0 \nobreakspace \leq \nobreakspace x_ij\ \ \ \forall (s,i) \in arcs` + + +Problem Factors: +---------------- +* budget: Max # of replications for a solver to take. + + * Default: 10000 + +* b: Total set-capacity that can be allocated to arcs + + * Default: 100 + +Fixed Model Factors: +-------------------- +* N/A + +Starting Solution: +------------------ +* initial_solution: (1,) * 20 + +Random Solutions: +----------------- +Sample uniformly from the simplex of :math:`\sum_{(i,j) \in arcs} \nobreakspace x_ij \nobreakspace \leq \nobreakspace b` and :math:`0 \nobreakspace \leq \nobreakspace x_ij\ \forall (s,i) \in arcs` + +Optimal Solution: +----------------- +Unknown + +Optimal Objective Function Value: +--------------------------------- +Unknown \ No newline at end of file diff --git a/simopt/models/covid.py b/simopt/models/covid.py new file mode 100644 index 000000000..de02dcf5e --- /dev/null +++ b/simopt/models/covid.py @@ -0,0 +1,2247 @@ +""" +Summary +------- +Under some testing and vaccination policy, simulate the spread of COVID-19 +over a period of time by multinomial distribution. +A detailed description of the model/problem can be found +`here `_. +""" +import numpy as np + +from ..base import Model, Problem + + +class COVID_vac(Model): + """ + A model that simulates the spread of COVID disease under isolation policy and vaccination policy + with a multinomial distribution. + Returns the total number of infected people and the total number of patients who have observable symptoms + during the whole period. + + Attributes + ---------- + name : string + name of model + n_rngs : int + number of random-number generators used to run a simulation replication + n_responses : int + number of responses (performance measures) + factors : dict + changeable factors of the simulation model + specifications : dict + details of each factor (for GUI, data validation, and defaults) + check_factor_list : dict + switch case for checking factor simulatability + + Arguments + --------- + fixed_factors : dict + fixed_factors of the simulation model + + See also + -------- + base.Model + """ + def __init__(self, fixed_factors={}): + self.name = "COVID_vac" + self.n_rngs = 7 + self.n_responses = 6 + self.factors = fixed_factors + self.specifications = { + "num_groups": { + "description": "Number of groups.", + "datatype": int, + "default": 3 + # "default": 7 + }, + "p_trans": { + "description": "Probability of transmission per interaction.", + "datatype": float, + "default": 0.018 + }, + "p_trans_vac": { + "description": "Probability of transmission per interaction if being vaccinated", + "datatype": float, + "default": 0.01 + }, + "inter_rate": { + "description": "Interaction rates between two groups per day", + "datatype": tuple, + "default": (10.58, 5, 2, 4, 6.37, 3, 6.9, 4, 2) + # "default": (10.57, 4, 1, 1, 2, 1, 1, 6, 12.8, 2, 2, 3.5, 1, 1, 2, 2.5, 8.4, 1.5, 1.5, 1, 2, 1.5, 1.5, 1, + # 11.61, 3.31, 3.5, 1, 1, 4.29, 4.91, 2.8, 2.9, 2.22, 1, 2.3, 1, 1, 1, 1, 2.2, 8.1, 2.75, 1, 1, 2.7, 1, 2.99, 1) # For 7 groups + }, + "group_size": { + "description": "Size of each group.", + "datatype": tuple, + "default": (8123, 4921, 3598) + # "default": (8123, 3645, 4921, 3598, 3598, 1907, 4478) #total 30270, for 7 gruops + }, + "lamb_exp_inf": { + "description": "Mean number of days from exposed to infectious.", + "datatype": float, + "default": 2.0 + }, + "lamb_inf_sym": { + "description": "Mean number of days from infectious to symptomatic.", + "datatype": float, + "default": 3.0 + }, + "lamb_sym": { + "description": "Mean number of days from symptomatic/asymptomatic to recovered.", + "datatype": float, + "default": 12.0 + }, + "n": { + "description": "Number of days to simulate.", + "datatype": int, + "default": 200 + }, + "init_infect_percent": { + "description": "Initial prevalance level.", + "datatype": tuple, + "default": (0.00200, 0.00121, 0.0008) + # "default": (0.00200, 0.00121, 0.0008, 0.002, 0.00121, 0.008, 0.002) # For 7 gruops + }, + "asymp_rate": { + "description": "Probability of being asymptomatic.", + "datatype": float, + "default": 0.35 + }, + "asymp_rate_vac": { + "description": "Probability of being asymptomatic for vaccinated individuals.", + "datatype": float, + "default": 0.5 + }, + "vac": { + "description": "The fraction of people being vaccinated in each group.", + "datatype": tuple, + "default": (0.8, 0.3, 0) + # "default": (1/7,1/7,1/7,1/7,1/7,1/7,1/7) # For 7 groups + }, + "total_vac": { + "description": "The total number of vaccines.", + "datatype": int, + "default": 8000 + }, + "freq": { + "description": "Testing frequency of each group.", + "datatype": tuple, + "default": (0/7, 0/7, 0/7) + # "default": (0/7,0/7,0/7,0/7,0/7,0/7,0/7) # For 7 groups + }, + "freq_vac": { + "description": "Testing frequency of each group.", + "datatype": tuple, + "default": (0/7, 0/7, 0/7, 0.8, 0.3, 0) + # "default": (0/7,0/7,0/7,0/7,0/7,0/7,0/7,0,0,0,0,0,0,0) # For 7 groups + }, + "false_neg": { + "description": "False negative rate.", + "datatype": float, + "default": 0.12 + }, + "w": { + "description": "Protection weight for each group.", + "datatype": tuple, + "default": (1, 1, 1) + } + } + + self.check_factor_list = { + "num_groups": self.check_num_groups, + "p_trans": self.check_p_trans, + "p_trans_vac": self.check_p_trans_vac, + "inter_rate": self.check_inter_rate, + "group_size": self.check_group_size, + "lamb_exp_inf": self.check_lamb_exp_inf, + "lamb_inf_sym": self.check_lamb_inf_sym, + "lamb_sym": self.check_lamb_sym, + "n": self.check_n, + "init_infect_percent": self.check_init_infect_percent, + "asymp_rate": self.check_asymp_rate, + "asymp_rate_vac": self.check_asymp_rate_vac, + "vac": self.check_vac, + "total_vac": self.check_total_vac, + "freq": self.check_freq, + "freq_vac": self.check_freq_vac, + "false_neg": self.check_false_neg, + "w": self.check_w + } + # Set factors of the simulation model. + super().__init__(fixed_factors) + + def check_num_groups(self): + return self.factors["num_groups"] > 0 + + def check_p_trans(self): + return self.factors["p_trans"] > 0 + + def check_p_trans_vac(self): + return self.factors["p_trans_vac"] > 0 + + def check_inter_rate(self): + return all(np.array(self.factors["inter_rate"]) >= 0) & (len(self.factors["inter_rate"]) == self.factors["num_groups"]**2) + + def check_group_size(self): + return all(np.array(self.factors["group_size"]) >= 0) & (len(self.factors["group_size"]) == self.factors["num_groups"]) + + def check_lamb_exp_inf(self): + return self.factors["lamb_exp_inf"] > 0 + + def check_lamb_inf_sym(self): + return self.factors["lamb_inf_sym"] > 0 + + def check_lamb_sym(self): + return self.factors["lamb_sym"] > 0 + + def check_n(self): + return self.factors["n"] > 0 + + def check_init_infect_percent(self): + return all(np.array(self.factors["init_infect_percent"]) >= 0) & (len(self.factors["init_infect_percent"]) == self.factors["num_groups"]) + + def check_asymp_rate(self): + return (self.factors["asymp_rate"] > 0) & (self.factors["asymp_rate"] < 1) + + def check_asymp_rate_vac(self): + return (self.factors["asymp_rate_vac"] > 0) & (self.factors["asymp_rate_vac"] < 1) + + def check_vac(self): + return all(np.array(self.factors["vac"]) >= 0) & (len(self.factors["init_infect_percent"]) == self.factors["num_groups"]) + + def check_total_vac(self): + return self.factors["total_vac"] > 0 + + def check_freq(self): + return all(np.array(self.factors["freq"]) >= 0) & (len(self.factors["freq"]) == self.factors["num_groups"]) + + def check_freq_vac(self): + return all(np.array(self.factors["freq_vac"]) >= 0) & (len(self.factors["freq_vac"]) == self.factors["num_groups"] * 2) + + def check_false_neg(self): + return (self.factors["false_neg"] > 0) & (self.factors["false_neg"] < 1) + + def check_w(self): + return (self.factors["w"] >= 0) + + def replicate(self, rng_list): + """ + Simulate a single replication for the current model factors. + + Arguments + --------- + rng_list : list of rng.MRG32k3a objects + rngs for model to use when simulating a replication + + Returns + ------- + responses : dict + performance measures of interest + "num_infected" = Number of infected individuals per day + "num_susceptible" = Number of susceptible individuals per day + "num_exposed" = Number of exposed individuals per day + "num_recovered" = Number of recovered individuals per day + "num_symptomatic" = Number of symptomatic individuals per day + "total_symp" = Total number of symptomatic individuals + """ + # Designate random number generator for generating Poisson random variables. + poisson_numexp_rng = rng_list[0] + binomial_asymp_rng = rng_list[1] + multinomial_exp_rng = rng_list[2] + multinomial_inf_rng = rng_list[3] + multinomial_symp_rng = rng_list[4] + multinomial_asymp_rng = rng_list[5] + multinomial_iso_rng = rng_list[6] + + # Reshape the transmission rate + inter_rate = np.reshape(np.array(self.factors["inter_rate"]), (self.factors["num_groups"], self.factors["num_groups"])) + # Calculate the transmission rate + t_rate = inter_rate * self.factors["p_trans"] + t_rate = np.sum(t_rate, axis=1) + t_rate_vac = inter_rate * self.factors["p_trans_vac"] + t_rate_vac = np.sum(t_rate_vac, axis=1) + + # Initialize states, each row is one day, each column is one group + susceptible = np.zeros((self.factors["n"], self.factors["num_groups"])) + sus_vac = np.zeros((self.factors["n"], self.factors["num_groups"])) + sus_non_vac = np.zeros((self.factors["n"], self.factors["num_groups"])) + + exposed_vac = np.zeros((self.factors["n"], self.factors["num_groups"])) + exposed_non_vac = np.zeros((self.factors["n"], self.factors["num_groups"])) + + infectious_vac = np.zeros((self.factors["n"], self.factors["num_groups"])) + infectious_non_vac = np.zeros((self.factors["n"], self.factors["num_groups"])) + + asymptomatic_vac = np.zeros((self.factors["n"], self.factors["num_groups"])) + asymptomatic_non_vac = np.zeros((self.factors["n"], self.factors["num_groups"])) + + symptomatic_vac = np.zeros((self.factors["n"], self.factors["num_groups"])) + symptomatic_non_vac = np.zeros((self.factors["n"], self.factors["num_groups"])) + + isolation_exp_non_vac = np.zeros((self.factors["n"], self.factors["num_groups"])) + isolation_inf_non_vac = np.zeros((self.factors["n"], self.factors["num_groups"])) + isolation_symp_non_vac = np.zeros((self.factors["n"], self.factors["num_groups"])) + isolation_asymp_non_vac = np.zeros((self.factors["n"], self.factors["num_groups"])) + + isolation_exp_vac = np.zeros((self.factors["n"], self.factors["num_groups"])) + isolation_inf_vac = np.zeros((self.factors["n"], self.factors["num_groups"])) + isolation_symp_vac = np.zeros((self.factors["n"], self.factors["num_groups"])) + isolation_asymp_vac = np.zeros((self.factors["n"], self.factors["num_groups"])) + + recovered = np.zeros((self.factors["n"], self.factors["num_groups"])) + + # Initialize the performance measures of interest + num_infected = np.zeros((self.factors["n"], self.factors["num_groups"])) + num_exposed = np.zeros((self.factors["n"], self.factors["num_groups"])) + num_recovered = np.zeros((self.factors["n"], self.factors["num_groups"])) + num_susceptible = np.zeros((self.factors["n"], self.factors["num_groups"])) + last_susceptible = np.zeros(self.factors["num_groups"]) + num_symptomatic = np.zeros((self.factors["n"], self.factors["num_groups"])) + tot_num_syptomatic = 0 + tot_num_isolated = 0 + num_isolation = np.zeros((self.factors["n"], self.factors["num_groups"])) + + # Number of newly coming people for each day, each state + inf_arr = np.zeros((self.factors["n"], self.factors["num_groups"])) + sym_arr = np.zeros((self.factors["n"], self.factors["num_groups"])) + asym_arr = np.zeros((self.factors["n"], self.factors["num_groups"])) + inf_arr_vac = np.zeros((self.factors["n"], self.factors["num_groups"])) + sym_arr_vac = np.zeros((self.factors["n"], self.factors["num_groups"])) + asym_arr_vac = np.zeros((self.factors["n"], self.factors["num_groups"])) + + # Number of newly isolated people for each day, each state + exp_arr_iso = np.zeros((self.factors["n"], self.factors["num_groups"])) + inf_arr_iso = np.zeros((self.factors["n"], self.factors["num_groups"])) + asym_arr_iso = np.zeros((self.factors["n"], self.factors["num_groups"])) + exp_arr_vac_iso = np.zeros((self.factors["n"], self.factors["num_groups"])) + inf_arr_vac_iso = np.zeros((self.factors["n"], self.factors["num_groups"])) + asym_arr_vac_iso = np.zeros((self.factors["n"], self.factors["num_groups"])) + + # Get the current vaccine policy + vac = self.factors["freq_vac"][self.factors["num_groups"]:] + freq = self.factors["freq_vac"][:self.factors["num_groups"]] + + # Add day 0 num infections + infectious_non_vac[0, :] = np.ceil(np.multiply(list(self.factors["group_size"]), list(self.factors["init_infect_percent"]))) + infectious_vac[0, :] = np.multiply(np.multiply(list(self.factors["group_size"]), list(self.factors["init_infect_percent"])), 0) + susceptible[0, :] = np.subtract(list(self.factors["group_size"]), infectious_non_vac[0, :]) + sus_vac[0, :] = np.ceil(np.multiply(list(self.factors["group_size"]), list(vac))) + sus_non_vac[0, :] = np.subtract(susceptible[0, :], sus_vac[0, :]) + + for g in range(self.factors["num_groups"]): + infect = infectious_vac[0, g] + infectious_non_vac[0, g] + num_infected[0][g] = np.sum(infect) + num_susceptible[0][g] = sus_vac[0, g] + sus_non_vac[0, g] + + # Initialization -- calculate the probability distribution for alias + # For exposed: + p_exp = [] # Min=1, max=7 (by original setting) + exp_max = 7 # Min=1, max=7 (by original setting) + lamb_exp = self.factors["lamb_exp_inf"] + p0_e = lamb_exp ** 0 * np.exp(-lamb_exp) / 1 + for i in range(1, 1 + exp_max): + p0_e = p0_e * lamb_exp / i + p_exp.append(p0_e) + p_exp = p_exp / np.sum(p_exp) # Normalize to sum equal to 1 + + dict_exp = {} + for i in range(1, 1 + exp_max): + dict_exp[i] = p_exp[i - 1] + + exp_table, exp_alias, exp_value = multinomial_exp_rng.alias_init(dict_exp) # New alias: exp_value + + # For infected: + p_inf = [] + inf_max = 8 + lamb_inf = self.factors["lamb_inf_sym"] + p0_i = lamb_inf ** 0 * np.exp(-lamb_inf) / 1 + for i in range(1, 1 + inf_max): + p0_i = p0_i * lamb_inf / i + p_inf.append(p0_i) + p_inf = p_inf / np.sum(p_inf) + + dict_inf = {} + for i in range(1, 1 + inf_max): + dict_inf[i] = p_inf[i - 1] + + inf_table, inf_alias, inf_value = multinomial_inf_rng.alias_init(dict_inf) + + # For symptomatic: + p_sym = [] + asym_sym_max = 20 + lamb_asy_sym = self.factors["lamb_sym"] + p0_as_s = lamb_asy_sym ** 0 * np.exp(-lamb_asy_sym) / 1 + for i in range(1, 1 + asym_sym_max): + p0_as_s = p0_as_s * lamb_asy_sym / i + p_sym.append(p0_as_s) + p_sym = p_sym / np.sum(p_sym) + + dict_sym = {} + for i in range(1, 1 + asym_sym_max): + dict_sym[i] = p_sym[i - 1] + + sym_table, sym_alias, sym_value = multinomial_symp_rng.alias_init(dict_sym) + asym_table, asym_alias, asym_value = multinomial_asymp_rng.alias_init(dict_sym) + + # Isolation schedule generator + def calculate_iso_mul(day_max, pb, n): # Note: day_max is the number of days before change, n is the number of people + p = [] + p0 = pb # pb = freq*(1-self.factors["false_neg"]) + p.append(p0) + for i in range(1, day_max): + p0 = p0 * p0 + p.append(p0) + p.append(1 - np.sum(p)) # p is a list with length day_max+1 + + dict_p = {} + for i in range(len(p)): + dict_p[i] = p[i] + + table, alias, value = multinomial_iso_rng.alias_init(dict_p) + + # For base case that we do not do testing + if pb == 0: + day_iso = np.zeros(len(p)).astype(int) + gen_iso_num = np.zeros(len(p)).astype(int) + else: + gen_iso = [] + for i in range(n): + gen_iso.append(multinomial_iso_rng.alias(table, alias, value)) + day_iso, gen_iso_num = np.unique(gen_iso, return_counts=True) # Note, day_iso start from today. last entry represents no isolation. + + return day_iso, gen_iso_num + + # Disease schedule generator + def calculate_mul(n, inf_table, inf_alias, inf_value): + gen_inf = [] + for i in range(n): + gen_inf.append(multinomial_inf_rng.alias(inf_table, inf_alias, inf_value)) + day_inf, gen_inf_num = np.unique(gen_inf, return_counts=True) + + return day_inf, gen_inf_num + + # Loop through day 1 - day n-1 + for day in range(0, self.factors['n']): + + if day == 0: + num_exp_non_vac = np.array(infectious_non_vac[0, :], int) + num_exp_vac = np.array(infectious_vac[0, :], int) + + else: + # Update the states from the day before + sus_vac[day, :] += sus_vac[day - 1, :] + sus_non_vac[day, :] += sus_non_vac[day - 1, :] + exposed_vac[day, :] += exposed_vac[day - 1, :] + exposed_non_vac[day, :] += exposed_non_vac[day - 1, :] + infectious_vac[day, :] += infectious_vac[day - 1, :] + infectious_non_vac[day, :] += infectious_non_vac[day - 1, :] + asymptomatic_vac[day, :] += asymptomatic_vac[day - 1, :] + asymptomatic_non_vac[day, :] += asymptomatic_non_vac[day - 1, :] + symptomatic_vac[day, :] += symptomatic_vac[day - 1, :] + symptomatic_non_vac[day, :] += symptomatic_non_vac[day - 1, :] + isolation_exp_non_vac[day, :] += isolation_exp_non_vac[day - 1, :] + isolation_exp_vac[day, :] += isolation_exp_vac[day - 1, :] + isolation_inf_non_vac[day, :] += isolation_inf_non_vac[day - 1, :] + isolation_inf_vac[day, :] += isolation_inf_vac[day - 1, :] + isolation_symp_non_vac[day, :] += isolation_symp_non_vac[day - 1, :] + isolation_symp_vac[day, :] += isolation_symp_vac[day - 1, :] + isolation_asymp_non_vac[day, :] += isolation_asymp_non_vac[day - 1, :] + isolation_asymp_vac[day, :] += isolation_asymp_vac[day - 1, :] + recovered[day, :] += recovered[day - 1, :] + + # Potential new exposed people (include those exposed but healthy and exposed will become infectious later) + new_exp_vac = np.multiply(np.multiply(t_rate_vac, (infectious_vac[day, :] + infectious_non_vac[day, :] + asymptomatic_vac[day, :] + asymptomatic_non_vac[day, :])), (sus_vac[day, :] / (sus_vac[day, :] + sus_non_vac[day, :] + exposed_vac[day, :] + exposed_non_vac[day, :] + infectious_vac[day, :] + infectious_non_vac[day, :] + asymptomatic_vac[day, :] + asymptomatic_non_vac[day, :] + recovered[day, :]))) + new_exp_non_vac = np.multiply(np.multiply(t_rate, (infectious_vac[day, :] + infectious_non_vac[day, :] + asymptomatic_vac[day, :] + asymptomatic_non_vac[day, :])), (sus_non_vac[day, :] / (sus_vac[day, :] + sus_non_vac[day, :] + exposed_vac[day, :] + exposed_non_vac[day, :] + infectious_vac[day, :] + infectious_non_vac[day, :] + asymptomatic_vac[day, :] + asymptomatic_non_vac[day, :] + recovered[day, :]))) + + num_exp_vac = [poisson_numexp_rng.poissonvariate(new_exp_vac[i]) for i in range(self.factors["num_groups"])] # Number of newly exposed people (will have disease) this day + num_exp_non_vac = [poisson_numexp_rng.poissonvariate(new_exp_non_vac[i]) for i in range(self.factors["num_groups"])] + + exposed_vac[day, :] = np.add(exposed_vac[day, :], num_exp_vac) + exposed_non_vac[day, :] = np.add(exposed_non_vac[day, :], num_exp_non_vac) + + sus_vac[day, :] = np.subtract(sus_vac[day, :], num_exp_vac) # Update the suspectible people (healthy) + sus_non_vac[day, :] = np.subtract(sus_non_vac[day, :], num_exp_non_vac) + + # Get vector of testing frequency from decision variable + freq = self.factors["freq_vac"][:self.factors["num_groups"]] + + # For exposed_non_vac: + for g in range(self.factors["num_groups"]): + + if day > 0: + # Exp_num: unscheduled people in state exposed + exp_num = num_exp_non_vac[g] + + day_exp, gen_exp_num = calculate_mul(exp_num, exp_table, exp_alias, exp_value) + + for i in range(len(gen_exp_num)): + n = gen_exp_num[i] # Subgroup of new comings according to their schedule + day_max = day_exp[i] + day_move_iso_exp, num_iso_exp = calculate_iso_mul(day_max, freq[g] * (1 - self.factors["false_neg"]), n) # Calculate isolation schedule for new comings + # The last entry in num_iso_exp represents the number of people not isolated. + for j in range(len(num_iso_exp) - 1): + if day + day_move_iso_exp[j] < self.factors["n"]: + exposed_non_vac[day + day_move_iso_exp[j], g] -= num_iso_exp[j] # Remove from exposed state + isolation_exp_non_vac[day + day_move_iso_exp[j], g] += num_iso_exp[j] # Move to isolatioin exposed + exp_arr_iso[day + day_move_iso_exp[j], g] += num_iso_exp[j] # Track the new comings for isolation exposed(to do disease schedule) + gen_exp_num[i] -= num_iso_exp[j] # Remove them from the free newcoming + tot_num_isolated += num_iso_exp[j] + + # Update for free new exposed people: + if day > 0: + for i in range(len(gen_exp_num)): + if day + day_exp[i] < self.factors["n"]: + infectious_non_vac[day + day_exp[i], g] += gen_exp_num[i] # Move to infectious state + exposed_non_vac[day + day_exp[i], g] -= gen_exp_num[i] # Remove from exposed state + inf_arr[day + day_exp[i], g] += gen_exp_num[i] # Track the new comings for infectious state + + # Schedule for isolated_exposed: + exp_iso_num = int(exp_arr_iso[day, g]) + day_exp_iso, gen_exp_num_iso = calculate_mul(exp_iso_num, exp_table, exp_alias, exp_value) # Disease schedule for isolation_exposed + + if day > 0: + for i in range(len(gen_exp_num_iso)): + if day + day_exp_iso[i] < self.factors["n"]: + isolation_inf_non_vac[day + day_exp_iso[i], g] += gen_exp_num_iso[i] # Move to isolation_infectious + isolation_exp_non_vac[day + day_exp_iso[i], g] -= gen_exp_num_iso[i] # Remove from isolation_exposed + inf_arr_iso[day + day_exp_iso[i], g] += gen_exp_num_iso[i] # Track the new comings for isolation_infectious + + # Get the number of new comings in infectious/symp/asymp states: + if day == 0: + inf_num = int(infectious_non_vac[day, g]) + asym_num = 0 + sym_num = 0 + # We do not do test at day0 + + else: + inf_num = int(inf_arr[day, g]) # The number of new comings for infectious state + asym_num = int(asym_arr[day, g]) + sym_num = int(sym_arr[day, g]) + + # Do schedule for the free unscheduled people in infectious state + day_inf, gen_inf_num = calculate_mul(inf_num, inf_table, inf_alias, inf_value) + + # Do test and isolation for new coming people: + for i in range(len(gen_inf_num)): + # The number of new coming individuals that will become infectious in day_max days + n = gen_inf_num[i] + day_max = day_inf[i] + # Assume the day of leaving state do not do test at this state + day_move_iso_inf, num_iso_inf = calculate_iso_mul(day_max, freq[g] * (1 - self.factors["false_neg"]), n) # Store the isolation schedule for this group of new comings + for j in range(len(num_iso_inf) - 1): # Move them to isolation at corrosponding days + if day + day_move_iso_inf[j] < self.factors["n"]: + infectious_non_vac[day + day_move_iso_inf[j], g] -= num_iso_inf[j] + isolation_inf_non_vac[day + day_move_iso_inf[j], g] += num_iso_inf[j] + inf_arr_iso[day + day_move_iso_inf[j], g] += num_iso_inf[j] # Track the number of new isolated + gen_inf_num[i] -= num_iso_inf[j] # Remove them from the free newcoming of day i subgroup + tot_num_isolated += num_iso_inf[j] + + # Move the number of people to the symp/asymp at correponding days + for i in range(len(gen_inf_num)): + if day + day_inf[i] < self.factors["n"]: + if gen_inf_num[i] != 0: + # Generate the number of asymptomatic people + asym_num_inf = binomial_asymp_rng.binomialvariate(int(gen_inf_num[i]), self.factors["asymp_rate"]) + sym_num_inf = gen_inf_num[i] - asym_num_inf + symptomatic_non_vac[day + day_inf[i], g] += sym_num_inf # Move to symptomatic state + asymptomatic_non_vac[day + day_inf[i], g] += asym_num_inf # Move to asymptomatic state + sym_arr[day + day_inf[i], g] += sym_num_inf + asym_arr[day + day_inf[i], g] += asym_num_inf + tot_num_syptomatic += sym_num_inf # Count the total symptomatic number + infectious_non_vac[day + day_inf[i], g] -= gen_inf_num[i] # Remove from infectious state + + # Schedule for infectious isolated + if day > 0: + inf_iso_num = int(inf_arr_iso[day, g]) + day_inf_iso, gen_inf_num_iso = calculate_mul(inf_iso_num, inf_table, inf_alias, inf_value) + + # If we only update the next day condition and then check the next + for i in range(len(gen_inf_num_iso)): + if day + day_inf_iso[i] < self.factors["n"]: + if gen_inf_num_iso[i] != 0: + asym_num_inf = binomial_asymp_rng.binomialvariate(int(gen_inf_num_iso[i]), self.factors["asymp_rate"]) # Number of people will go to isolation_asymp + sym_num_inf = gen_inf_num_iso[i] - asym_num_inf + symptomatic_non_vac[day + day_inf_iso[i], g] += sym_num_inf # All symptomatic people are isolated + isolation_asymp_non_vac[day + day_inf_iso[i], g] += asym_num_inf + sym_arr[day + day_inf_iso[i], g] += sym_num_inf # All symptomatic people are isolated + asym_arr_iso[day + day_inf_iso[i], g] += asym_num_inf + tot_num_syptomatic += sym_num_inf + isolation_inf_non_vac[day + day_inf_iso[i], g] -= gen_inf_num_iso[i] + + # For symptomatic: + day_sym, gen_sym_num = calculate_mul(sym_num, sym_table, sym_alias, sym_value) + + for t in range(len(gen_sym_num)): + if day + day_sym[t] < self.factors["n"]: + symptomatic_non_vac[day + day_sym[t], g] -= gen_sym_num[t] + recovered[day + day_sym[t], g] += gen_sym_num[t] + + # For asymptomatic: + day_asym, gen_asym_num = calculate_mul(asym_num, asym_table, asym_alias, asym_value) + + for i in range(len(gen_asym_num)): + n = gen_asym_num[i] + day_max = day_asym[i] + day_move_iso_asym, num_iso_asym = calculate_iso_mul(day_max, freq[g] * (1 - self.factors["false_neg"]), n) + for j in range(len(num_iso_asym) - 1): + if day + day_move_iso_asym[j] < self.factors["n"]: + asymptomatic_non_vac[day + day_move_iso_asym[j], g] -= num_iso_asym[j] + isolation_asymp_non_vac[day + day_move_iso_asym[j], g] += num_iso_asym[j] + asym_arr_iso[day + day_move_iso_asym[j], g] += num_iso_asym[j] + gen_asym_num[i] -= num_iso_asym[j] + tot_num_isolated += num_iso_asym[j] + + for t in range(len(gen_asym_num)): + if day + day_asym[t] < self.factors["n"]: + asymptomatic_non_vac[day + day_asym[t], g] -= gen_asym_num[t] + recovered[day + day_asym[t], g] += gen_asym_num[t] + + # For asymptomatic isolation: + if day > 0: + asym_num_iso = int(asym_arr_iso[day, g]) + day_asym_iso, gen_asym_num_iso = calculate_mul(asym_num_iso, asym_table, asym_alias, asym_value) + + for t in range(len(gen_asym_num_iso)): + if day + day_asym_iso[t] < self.factors["n"]: + isolation_asymp_non_vac[day + day_asym_iso[t], g] -= gen_asym_num_iso[t] + recovered[day + day_asym_iso[t], g] += gen_asym_num_iso[t] + + # For vaccinated group: + # For exposed_vac: + for g in range(self.factors["num_groups"]): + + if day > 0: + # Exp_num: unscheduled people in state exposed + exp_num = num_exp_vac[g] + day_exp, gen_exp_num = calculate_mul(exp_num, exp_table, exp_alias, exp_value) + + for i in range(len(gen_exp_num)): + n = gen_exp_num[i] # Subgroup of new comings according to their schedule + day_max = day_exp[i] + day_move_iso_exp, num_iso_exp = calculate_iso_mul(day_max, freq[g] * (1 - self.factors["false_neg"]), n) # Calculate isolation schedule for new comings + # The last entry in num_iso_exp represents the number of people not isolated. + for j in range(len(num_iso_exp) - 1): + if day + day_move_iso_exp[j] < self.factors["n"]: + exposed_vac[day + day_move_iso_exp[j], g] -= num_iso_exp[j] #Remove from exposed state + isolation_exp_vac[day + day_move_iso_exp[j], g] += num_iso_exp[j] # Move to isolatioin exposed + exp_arr_vac_iso[day + day_move_iso_exp[j], g] += num_iso_exp[j] + gen_exp_num[i] -= num_iso_exp[j] # Remove them from the free newcoming + tot_num_isolated += num_iso_exp[j] + + # Update for free new exposed people: + if day > 0: + for i in range(len(gen_exp_num)): + if day + day_exp[i] < self.factors["n"]: + infectious_vac[day + day_exp[i], g] += gen_exp_num[i] + exposed_vac[day + day_exp[i], g] -= gen_exp_num[i] + inf_arr_vac[day + day_exp[i], g] += gen_exp_num[i] + + # Schedule for isolated_exposed: + exp_iso_num = int(exp_arr_vac_iso[day, g]) + day_exp_iso, gen_exp_num_iso = calculate_mul(exp_iso_num, exp_table, exp_alias, exp_value) + + if day > 0: + for i in range(len(gen_exp_num_iso)): + if day + day_exp_iso[i] < self.factors["n"]: + isolation_inf_vac[day + day_exp_iso[i], g] += gen_exp_num_iso[i] + isolation_exp_vac[day + day_exp_iso[i], g] -= gen_exp_num_iso[i] + inf_arr_vac_iso[day + day_exp_iso[i], g] += gen_exp_num_iso[i] + + # For infectious: + if day == 0: + inf_num = int(infectious_vac[day, g]) + asym_num = 0 + sym_num = 0 + # We do not do test at day 0 + + else: + inf_num = int(inf_arr_vac[day, g]) + asym_num = int(asym_arr_vac[day, g]) + sym_num = int(sym_arr_vac[day, g]) + + # Do schedule for the free unscheduled people in infectious state + day_inf, gen_inf_num = calculate_mul(inf_num, inf_table, inf_alias, inf_value) + + # Do test and isolation for new coming people: + for i in range(len(gen_inf_num)): + # The number of new coming individuals that will become infectious in day_max days + n = gen_inf_num[i] + day_max = day_inf[i] + # Assume the day of leaving state do not do test at this state + day_move_iso_inf, num_iso_inf = calculate_iso_mul(day_max, freq[g] * (1 - self.factors["false_neg"]), n) # Store the isolation schedule for this group of new comings + for j in range(len(num_iso_inf) - 1): # Move them to isolation at corrosponding days + if day + day_move_iso_inf[j] < self.factors["n"]: + infectious_vac[day + day_move_iso_inf[j], g] -= num_iso_inf[j] + isolation_inf_vac[day + day_move_iso_inf[j], g] += num_iso_inf[j] + inf_arr_vac_iso[day + day_move_iso_inf[j], g] += num_iso_inf[j] # Track the number of new isolated + gen_inf_num[i] -= num_iso_inf[j] # Remove them from the free newcoming of day i subgroup + tot_num_isolated += num_iso_inf[j] + + # Move the number of people to the symp/asymp at correponding days + for i in range(len(gen_inf_num)): + if day + day_inf[i] < self.factors["n"]: + if gen_inf_num[i] != 0: + # Generate the number of asymptomatic people + asym_num_inf = binomial_asymp_rng.binomialvariate(int(gen_inf_num[i]), self.factors["asymp_rate_vac"]) + sym_num_inf = gen_inf_num[i] - asym_num_inf + symptomatic_vac[day + day_inf[i], g] += sym_num_inf + asymptomatic_vac[day + day_inf[i], g] += asym_num_inf + sym_arr_vac[day + day_inf[i], g] += sym_num_inf + asym_arr_vac[day + day_inf[i], g] += asym_num_inf + tot_num_syptomatic += sym_num_inf + infectious_vac[day + day_inf[i], g] -= gen_inf_num[i] + + # Schedule for infectious isolated + if day > 0: + inf_iso_num = int(inf_arr_vac_iso[day, g]) + day_inf_iso, gen_inf_num_iso = calculate_mul(inf_iso_num, inf_table, inf_alias, inf_value) + + # If we only update the next day condition and then check the next + for i in range(len(gen_inf_num_iso)): + if day + day_inf_iso[i] < self.factors["n"]: + if gen_inf_num_iso[i] != 0: + asym_num_inf = binomial_asymp_rng.binomialvariate(int(gen_inf_num_iso[i]), self.factors["asymp_rate_vac"]) + sym_num_inf = gen_inf_num_iso[i] - asym_num_inf + symptomatic_vac[day + day_inf_iso[i], g] += sym_num_inf # All symptomatic people are isolated + isolation_asymp_vac[day + day_inf_iso[i], g] += asym_num_inf + sym_arr_vac[day + day_inf_iso[i], g] += sym_num_inf # All symptomatic people are isolated + asym_arr_vac_iso[day + day_inf_iso[i], g] += asym_num_inf + tot_num_syptomatic += sym_num_inf + isolation_inf_vac[day + day_inf_iso[i], g] -= gen_inf_num_iso[i] + + # For symptomatic: + day_sym, gen_sym_num = calculate_mul(sym_num, sym_table, sym_alias, sym_value) + + for t in range(len(gen_sym_num)): + if day + day_sym[t] < self.factors["n"]: + symptomatic_vac[day + day_sym[t], g] -= gen_sym_num[t] + recovered[day + day_sym[t], g] += gen_sym_num[t] + + # For asymptomatic: + day_asym, gen_asym_num = calculate_mul(asym_num, asym_table, asym_alias, asym_value) + + for i in range(len(gen_asym_num)): + n = gen_asym_num[i] + day_max = day_asym[i] + day_move_iso_asym, num_iso_asym = calculate_iso_mul(day_max, freq[g] * (1 - self.factors["false_neg"]), n) + for j in range(len(num_iso_asym) - 1): + if day + day_move_iso_asym[j] < self.factors["n"]: + asymptomatic_vac[day + day_move_iso_asym[j], g] -= num_iso_asym[j] + isolation_asymp_vac[day + day_move_iso_asym[j], g] += num_iso_asym[j] + asym_arr_vac_iso[day + day_move_iso_asym[j], g] += num_iso_asym[j] + gen_asym_num[i] -= num_iso_asym[j] + tot_num_isolated += num_iso_asym[j] + + for t in range(len(gen_asym_num)): + if day + day_asym[t] < self.factors["n"]: + asymptomatic_vac[day + day_asym[t], g] -= gen_asym_num[t] + recovered[day + day_asym[t], g] += gen_asym_num[t] + + # For asymptomatic isolation: + if day > 0: + asym_num_iso = int(asym_arr_vac_iso[day, g]) + day_asym_iso, gen_asym_num_iso = calculate_mul(asym_num_iso, asym_table, asym_alias, asym_value) + + for t in range(len(gen_asym_num_iso)): + if day + day_asym_iso[t] < self.factors["n"]: + isolation_asymp_vac[day + day_asym_iso[t], g] -= gen_asym_num_iso[t] + recovered[day + day_asym_iso[t], g] += gen_asym_num_iso[t] + + # Update performance measures + for g in range(self.factors["num_groups"]): + num_exposed[day][g] = np.sum(exposed_non_vac[day, g] + exposed_vac[day, g] + isolation_exp_non_vac[day, g] + isolation_exp_vac[day, g]) + num_susceptible[day][g] = np.sum(sus_vac[day, g] + sus_non_vac[day, g]) + num_symptomatic[day][g] = np.sum(symptomatic_vac[day, g] + symptomatic_non_vac[day, g]) # All symp people are isolated. isolated_symp = symp + num_recovered[day][g] = np.sum(recovered[day, g]) + num_infected[day][g] = np.sum(infectious_non_vac[day, g] + infectious_vac[day, g] + symptomatic_non_vac[day, g] + symptomatic_vac[day, g] + asymptomatic_non_vac[day, g] + asymptomatic_vac[day, g] + + isolation_inf_non_vac[day, g] + isolation_inf_vac[day, g] + isolation_asymp_non_vac[day, g] + isolation_asymp_vac[day, g]) + num_isolation[day][g] = np.sum(isolation_exp_non_vac[day, g] + isolation_inf_non_vac[day, g] + symptomatic_non_vac[day, g] + isolation_asymp_non_vac[day, g] + + isolation_exp_vac[day, g] + isolation_inf_vac[day, g] + symptomatic_vac[day, g] + isolation_asymp_vac[day, g]) + + # Compose responses and gradients. + last_susceptible = num_susceptible[self.factors["n"] - 1] # Number of suspectible(unaffected) people at the end of the period + inf = self.factors["group_size"] - last_susceptible # Number of total infected people during the period + w = np.array(self.factors["w"]) # Protection-rate for each group, here we heavy scale for the group3 as example w=[1,1,5]; if no scaling, set w=np.ones + tot_infected = np.dot(w, inf) # After adjusting for the protection rate, the weighted objective value (adjusted infected) + + responses = {"num_infected": num_infected, + "num_exposed": num_exposed, + "num_susceptible": num_susceptible, + "num_recovered": num_recovered, + "num_symptomatic": num_symptomatic, + "free_population": last_susceptible, + "num_isolation": num_isolation, + "total_symp": tot_num_syptomatic, + "total_isolated": tot_num_isolated + tot_num_syptomatic, + "total_infected": tot_infected} + gradients = {response_key: + {factor_key: np.nan for factor_key in self.specifications} + for response_key in responses + } + return responses, gradients + + +""" +Summary +------- +Minimize the average number of daily infected people. +""" + + +class CovidMinInfectVac(Problem): + """ + Base class to implement simulation-optimization problems. + + Attributes + ---------- + name : string + name of problem + dim : int + number of decision variables + n_objectives : int + number of objectives + n_stochastic_constraints : int + number of stochastic constraints + minmax : tuple of int (+/- 1) + indicator of maximization (+1) or minimization (-1) for each objective + constraint_type : string + description of constraints types: + "unconstrained", "box", "deterministic", "stochastic" + variable_type : string + description of variable types: + "discrete", "continuous", "mixed" + lower_bounds : tuple + lower bound for each decision variable + upper_bounds : tuple + upper bound for each decision variable + Ci : ndarray (or None) + Coefficient matrix for linear inequality constraints of the form Ci@x <= di + Ce : ndarray (or None) + Coefficient matrix for linear equality constraints of the form Ce@x = de + di : ndarray (or None) + Constraint vector for linear inequality constraints of the form Ci@x <= di + de : ndarray (or None) + Constraint vector for linear equality constraints of the form Ce@x = de + gradient_available : bool + indicates if gradient of objective function is available + optimal_value : float + optimal objective function value + optimal_solution : tuple + optimal solution + model : Model object + associated simulation model that generates replications + model_default_factors : dict + default values for overriding model-level default factors + model_fixed_factors : dict + combination of overriden model-level factors and defaults + model_decision_factors : set of str + set of keys for factors that are decision variables + rng_list : list of rng.MRG32k3a objects + list of RNGs used to generate a random initial solution + or a random problem instance + factors : dict + changeable factors of the problem + initial_solution : tuple + default initial solution from which solvers start + budget : int > 0 + max number of replications (fn evals) for a solver to take + specifications : dict + details of each factor (for GUI, data validation, and defaults) + + Arguments + --------- + name : str + user-specified name for problem + fixed_factors : dict + dictionary of user-specified problem factors + model_fixed factors : dict + subset of user-specified non-decision factors to pass through to the model + + See also + -------- + base.Problem + """ + def __init__(self, name="COVID-vac-test-1", fixed_factors={}, model_fixed_factors={}): + self.name = name + self.n_objectives = 1 + self.n_stochastic_constraints = 0 + self.minmax = (-1,) + self.constraint_type = "box" + self.variable_type = "continuous" + self.gradient_available = True + self.optimal_value = None + self.optimal_solution = None + self.model_default_factors = {} + self.model_fixed_factors = {} + self.model_decision_factors = {"freq_vac"} + self.factors = fixed_factors + self.specifications = { + "initial_solution": { + "description": "Initial solution from which solvers start.", + "datatype": tuple, + # "default": (0/7, 0/7, 0/7, 0/7, 0/7, 0/7, 0/7, 0, 0, 0, 0, 0, 0, 0) #for 7 groups + "default": (0/7, 0/7, 0/7, 0, 0, 0) + }, + "budget": { + "description": "Max # of replications for a solver to take.", + "datatype": int, + "default": 600 + }, + "vaccine_cap": { + "description": "Maximum number of vaccines.", + "datatype": int, + "default": 8000 + }, + "testing_cap": { + "description": "Maximum testing capacity per day.", + "datatype": int, + "default": 5000 + }, + "pen_coef": { + "description": "Penalty coefficient.", + "datatype": int, + "default": 100000 + }, + } + self.check_factor_list = { + "initial_solution": self.check_initial_solution, + "budget": self.check_budget, + "testing_cap": self.check_testing_cap, + "vaccine_cap": self.check_vaccine_cap, + "pen_coef": self.check_pen_coef + } + super().__init__(fixed_factors, model_fixed_factors) + # Instantiate model with fixed factors and overwritten defaults. + self.model = COVID_vac(self.model_fixed_factors) + self.dim = len(self.model.factors["group_size"]) + self.lower_bounds = (0,) * self.dim + self.upper_bounds = (1,) * self.dim + self.Ci = None + self.Ce = None + self.di = None + self.de = None + + def check_vaccine_cap(self): + return self.factors["vaccine_cap"] > 0 + + def check_testing_cap(self): + return self.factors["testing_cap"] > 0 + + def check_pen_coef(self): + return self.factors["pen_coef"] > 0 + + def vector_to_factor_dict(self, vector): + """ + Convert a vector of variables to a dictionary with factor keys + + Arguments + --------- + vector : tuple + vector of values associated with decision variables + + Returns + ------- + factor_dict : dictionary + dictionary with factor keys and associated values + """ + factor_dict = { + "freq_vac": vector + } + return factor_dict + + def factor_dict_to_vector(self, factor_dict): + """ + Convert a dictionary with factor keys to a vector + of variables. + + Arguments + --------- + factor_dict : dictionary + dictionary with factor keys and associated values + + Returns + ------- + vector : tuple + vector of values associated with decision variables + """ + vector = (factor_dict["freq_vac"], ) + return vector + + def response_dict_to_objectives(self, response_dict): + """ + Convert a dictionary with response keys to a vector + of objectives. + + Arguments + --------- + response_dict : dictionary + dictionary with response keys and associated values + + Returns + ------- + objectives : tuple + vector of objectives + """ + objectives = (response_dict["total_symp"], ) + return objectives + + def response_dict_to_stoch_constraints(self, response_dict): + """ + Convert a dictionary with response keys to a vector + of left-hand sides of stochastic constraints: E[Y] >= 0 + + Arguments + --------- + response_dict : dictionary + dictionary with response keys and associated values + + Returns + ------- + stoch_constraints : tuple + vector of LHSs of stochastic constraint + """ + stoch_constraints = None + return stoch_constraints + + def deterministic_objectives_and_gradients(self, x): + """ + Compute deterministic components of objectives for a solution `x`. + + Arguments + --------- + x : tuple + vector of decision variables + + Returns + ------- + det_objectives : tuple + vector of deterministic components of objectives + det_objectives_gradients : tuple + vector of gradients of deterministic components of objectives + """ + # Checking: + # print(self.factors['pen_coef']) + # for g in range(self.dim): + # print(np.dot(self.model.factors["group_size"][g],x[g])) + # print(np.sum(np.dot(self.model.factors["group_size"][g],x[g]) for g in range(self.dim))) + # print(max(np.sum(np.dot(self.model.factors["group_size"][g],x[g]) for g in range(self.dim)) - self.factors["vaccine_cap"],0)) + + x_v = x[self.dim: self.dim * 2] + x_t = x[: self.dim] + det_objectives_test = (self.factors["pen_coef"] * (max(np.sum(np.ceil(np.dot(self.model.factors["group_size"][g], x_t[g])) for g in range(self.dim)) - self.factors["testing_cap"], 0)),) + det_objectives_vac = (self.factors["pen_coef"] * (max(np.sum(np.ceil(np.dot(self.model.factors["group_size"][g], x_v[g])) for g in range(self.dim)) - self.factors["vaccine_cap"], 0)),) + det_objectives = max(det_objectives_test, det_objectives_vac) + det_objectives_gradients = ((0,),) + return det_objectives, det_objectives_gradients + + def deterministic_stochastic_constraints_and_gradients(self, x): + """ + Compute deterministic components of stochastic constraints + for a solution `x`. + + Arguments + --------- + x : tuple + vector of decision variables + + Returns + ------- + det_stoch_constraints : tuple + vector of deterministic components of stochastic constraints + det_stoch_constraints_gradients : tuple + vector of gradients of deterministic components of + stochastic constraints + """ + det_stoch_constraints = None + det_stoch_constraints_gradients = None + return det_stoch_constraints, det_stoch_constraints_gradients + + def check_deterministic_constraints(self, x): + """ + Check if a solution `x` satisfies the problem's deterministic + constraints. + + Arguments + --------- + x : tuple + vector of decision variables + + Returns + ------- + satisfies : bool + indicates if solution `x` satisfies the deterministic constraints. + """ + return np.all(x >= 0) + + def get_random_solution(self, rand_sol_rng): + """ + Generate a random solution for starting or restarting solvers. + + Arguments + --------- + rand_sol_rng : rng.MRG32k3a object + random-number generator used to sample a new random solution + + Returns + ------- + x : tuple + vector of decision variables + """ + # If uniformly find freq & vac: + # x = tuple([rand_sol_rng.uniform(0,1) for _ in range(self.dim)]) + # f = tuple([rand_sol_rng.uniform(0,1) for _ in range(self.dim)]) + # dx = f + x + + # By redistribution method: (reallocate the resource(vac/freq) if some group have more resource than their population size) + # Linear constraint + # For vaccine: + x = tuple(rand_sol_rng.integer_random_vector_from_simplex(self.model.factors["num_groups"], self.factors["vaccine_cap"])) + v = np.divide(x, self.model.factors["group_size"]) + + x = np.array(x) # For the temporal calculation + v = np.array(v) + + n = len(self.model.factors["group_size"]) + while True: + xn = x - np.array(self.model.factors["group_size"]) + idx = np.argmax(xn) + if v[idx] > 1: + remain = x[idx] - self.model.factors["group_size"][idx] + x[idx] -= remain + x += int(np.floor(remain / n)) + short_idx = np.argmax(np.array(self.model.factors["group_size"]) - x) + rr = remain - int(np.floor(remain / 3) * n) + if rr > 0: + x[short_idx] += rr + v = np.divide(x, self.model.factors["group_size"]) + else: + break + + x = tuple(x) + v = tuple(v) + + # If modify testing freq by redistribution, for testing: + xf = tuple(rand_sol_rng.integer_random_vector_from_simplex(self.model.factors["num_groups"], self.factors["testing_cap"])) + f = np.divide(xf, self.model.factors["group_size"]) + + xf = np.array(xf) # For the temporal calculation + f = np.array(f) + + n = len(self.model.factors["group_size"]) + while True: + xn = xf - np.array(self.model.factors["group_size"]) + idx = np.argmax(xn) + if f[idx] > 1: + remain = xf[idx] - self.model.factors["group_size"][idx] + xf[idx] -= remain + xf += int(np.floor(remain / n)) + short_idx = np.argmax(np.array(self.model.factors["group_size"]) - xf) + rr = remain - int(np.floor(remain / 3) * n) + if rr > 0: + xf[short_idx] += rr + f = np.divide(xf, self.model.factors["group_size"]) + else: + break + + xf = tuple(xf) + f = tuple(f) + + print('initial f, v: ', f, v) + + # Final decision variable freq_vac: + dx = f + v + + return dx + + +# Other problem classes: +# Sub-problem 2: problem with more groups. +class CovidMinInfectVac2(Problem): + """ + Base class to implement simulation-optimization problems. + In this problem classes, consider there are 7 groups in total. + Thus, to study this problem class, one need to modify the model part default values to those corresponding to 7 groups. + + Attributes + ---------- + name : string + name of problem + dim : int + number of decision variables + n_objectives : int + number of objectives + n_stochastic_constraints : int + number of stochastic constraints + minmax : tuple of int (+/- 1) + indicator of maximization (+1) or minimization (-1) for each objective + constraint_type : string + description of constraints types: + "unconstrained", "box", "deterministic", "stochastic" + variable_type : string + description of variable types: + "discrete", "continuous", "mixed" + lower_bounds : tuple + lower bound for each decision variable + upper_bounds : tuple + upper bound for each decision variable + Ci : ndarray (or None) + Coefficient matrix for linear inequality constraints of the form Ci@x <= di + Ce : ndarray (or None) + Coefficient matrix for linear equality constraints of the form Ce@x = de + di : ndarray (or None) + Constraint vector for linear inequality constraints of the form Ci@x <= di + de : ndarray (or None) + Constraint vector for linear equality constraints of the form Ce@x = de + gradient_available : bool + indicates if gradient of objective function is available + optimal_value : float + optimal objective function value + optimal_solution : tuple + optimal solution + model : Model object + associated simulation model that generates replications + model_default_factors : dict + default values for overriding model-level default factors + model_fixed_factors : dict + combination of overriden model-level factors and defaults + model_decision_factors : set of str + set of keys for factors that are decision variables + rng_list : list of rng.MRG32k3a objects + list of RNGs used to generate a random initial solution + or a random problem instance + factors : dict + changeable factors of the problem + initial_solution : tuple + default initial solution from which solvers start + budget : int > 0 + max number of replications (fn evals) for a solver to take + specifications : dict + details of each factor (for GUI, data validation, and defaults) + + Arguments + --------- + name : str + user-specified name for problem + fixed_factors : dict + dictionary of user-specified problem factors + model_fixed factors : dict + subset of user-specified non-decision factors to pass through to the model + + See also + -------- + base.Problem + """ + def __init__(self, name="COVID-vac-test-2", fixed_factors={}, model_fixed_factors={}): + self.name = name + self.n_objectives = 1 + self.n_stochastic_constraints = 0 + self.minmax = (-1,) + self.constraint_type = "box" + self.variable_type = "continuous" + self.gradient_available = True + self.optimal_value = None + self.optimal_solution = None + self.model_default_factors = {} + self.model_fixed_factors = {} + self.model_decision_factors = {"freq_vac"} + self.factors = fixed_factors + self.specifications = { + "initial_solution": { + "description": "Initial solution from which solvers start.", + "datatype": tuple, + "default": (0/7, 0/7, 0/7, 0/7, 0/7, 0/7, 0/7, 0, 0, 0, 0, 0, 0, 0) #for 7 groups + }, + "budget": { + "description": "Max # of replications for a solver to take.", + "datatype": int, + "default": 600 + }, + "vaccine_cap": { + "description": "Maximum number of vaccines.", + "datatype": int, + "default": 8000 + }, + "testing_cap": { + "description": "Maximum testing capacity per day.", + "datatype": int, + "default": 5000 + }, + "pen_coef": { + "description": "Penalty coefficient.", + "datatype": int, + "default": 100000 + }, + } + self.check_factor_list = { + "initial_solution": self.check_initial_solution, + "budget": self.check_budget, + "testing_cap": self.check_testing_cap, + "vaccine_cap": self.check_vaccine_cap, + "pen_coef": self.check_pen_coef + } + super().__init__(fixed_factors, model_fixed_factors) + # Instantiate model with fixed factors and overwritten defaults. + self.model = COVID_vac(self.model_fixed_factors) + self.dim = len(self.model.factors["group_size"]) + self.lower_bounds = (0,) * self.dim + self.upper_bounds = (1,) * self.dim + self.Ci = None + self.Ce = None + self.di = None + self.de = None + + def check_vaccine_cap(self): + return self.factors["vaccine_cap"] > 0 + + def check_testing_cap(self): + return self.factors["testing_cap"] > 0 + + def check_pen_coef(self): + return self.factors["pen_coef"] > 0 + + def vector_to_factor_dict(self, vector): + """ + Convert a vector of variables to a dictionary with factor keys + + Arguments + --------- + vector : tuple + vector of values associated with decision variables + + Returns + ------- + factor_dict : dictionary + dictionary with factor keys and associated values + """ + factor_dict = { + "freq_vac": vector + } + return factor_dict + + def factor_dict_to_vector(self, factor_dict): + """ + Convert a dictionary with factor keys to a vector + of variables. + + Arguments + --------- + factor_dict : dictionary + dictionary with factor keys and associated values + + Returns + ------- + vector : tuple + vector of values associated with decision variables + """ + vector = (factor_dict["freq_vac"], ) + return vector + + def response_dict_to_objectives(self, response_dict): + """ + Convert a dictionary with response keys to a vector + of objectives. + + Arguments + --------- + response_dict : dictionary + dictionary with response keys and associated values + + Returns + ------- + objectives : tuple + vector of objectives + """ + objectives = (response_dict["total_infected"], ) + return objectives + + def response_dict_to_stoch_constraints(self, response_dict): + """ + Convert a dictionary with response keys to a vector + of left-hand sides of stochastic constraints: E[Y] >= 0 + + Arguments + --------- + response_dict : dictionary + dictionary with response keys and associated values + + Returns + ------- + stoch_constraints : tuple + vector of LHSs of stochastic constraint + """ + stoch_constraints = None + return stoch_constraints + + def deterministic_objectives_and_gradients(self, x): + """ + Compute deterministic components of objectives for a solution `x`. + + Arguments + --------- + x : tuple + vector of decision variables + + Returns + ------- + det_objectives : tuple + vector of deterministic components of objectives + det_objectives_gradients : tuple + vector of gradients of deterministic components of objectives + """ + # Checking: + # print(self.factors['pen_coef']) + # for g in range(self.dim): + # print(np.dot(self.model.factors["group_size"][g],x[g])) + # print(np.sum(np.dot(self.model.factors["group_size"][g],x[g]) for g in range(self.dim))) + # print(max(np.sum(np.dot(self.model.factors["group_size"][g],x[g]) for g in range(self.dim)) - self.factors["vaccine_cap"],0)) + + x_v = x[self.dim: self.dim * 2] + x_t = x[: self.dim] + det_objectives_test = (self.factors["pen_coef"] * (max(np.sum(np.ceil(np.dot(self.model.factors["group_size"][g], x_t[g])) for g in range(self.dim)) - self.factors["testing_cap"], 0)),) + det_objectives_vac = (self.factors["pen_coef"] * (max(np.sum(np.ceil(np.dot(self.model.factors["group_size"][g], x_v[g])) for g in range(self.dim)) - self.factors["vaccine_cap"], 0)),) + det_objectives = max(det_objectives_test, det_objectives_vac) + det_objectives_gradients = ((0,),) + return det_objectives, det_objectives_gradients + + def deterministic_stochastic_constraints_and_gradients(self, x): + """ + Compute deterministic components of stochastic constraints + for a solution `x`. + + Arguments + --------- + x : tuple + vector of decision variables + + Returns + ------- + det_stoch_constraints : tuple + vector of deterministic components of stochastic constraints + det_stoch_constraints_gradients : tuple + vector of gradients of deterministic components of + stochastic constraints + """ + det_stoch_constraints = None + det_stoch_constraints_gradients = None + return det_stoch_constraints, det_stoch_constraints_gradients + + def check_deterministic_constraints(self, x): + """ + Check if a solution `x` satisfies the problem's deterministic + constraints. + + Arguments + --------- + x : tuple + vector of decision variables + + Returns + ------- + satisfies : bool + indicates if solution `x` satisfies the deterministic constraints. + """ + return np.all(x >= 0) + + def get_random_solution(self, rand_sol_rng): + """ + Generate a random solution for starting or restarting solvers. + + Arguments + --------- + rand_sol_rng : rng.MRG32k3a object + random-number generator used to sample a new random solution + + Returns + ------- + x : tuple + vector of decision variables + """ + # If uniformly find freq & vac: + # x = tuple([rand_sol_rng.uniform(0,1) for _ in range(self.dim)]) + # f = tuple([rand_sol_rng.uniform(0,1) for _ in range(self.dim)]) + # dx = f + x + + # By redistribution method: (reallocate the resource(vac/freq) if some group have more resource than their population size) + # Linear constraint + # For vaccine: + x = tuple(rand_sol_rng.integer_random_vector_from_simplex(self.model.factors["num_groups"], self.factors["vaccine_cap"])) + v = np.divide(x, self.model.factors["group_size"]) + + x = np.array(x) # For the temporal calculation + v = np.array(v) + + n = len(self.model.factors["group_size"]) + while True: + xn = x - np.array(self.model.factors["group_size"]) + idx = np.argmax(xn) + if v[idx] > 1: + remain = x[idx] - self.model.factors["group_size"][idx] + x[idx] -= remain + x += int(np.floor(remain / n)) + short_idx = np.argmax(np.array(self.model.factors["group_size"]) - x) + rr = remain - int(np.floor(remain / 3) * n) + if rr > 0: + x[short_idx] += rr + v = np.divide(x, self.model.factors["group_size"]) + else: + break + + x = tuple(x) + v = tuple(v) + + # If modify testing freq by redistribution, for testing: + xf = tuple(rand_sol_rng.integer_random_vector_from_simplex(self.model.factors["num_groups"], self.factors["testing_cap"])) + f = np.divide(xf, self.model.factors["group_size"]) + + xf = np.array(xf) # For the temporal calculation + f = np.array(f) + + n = len(self.model.factors["group_size"]) + while True: + xn = xf - np.array(self.model.factors["group_size"]) + idx = np.argmax(xn) + if f[idx] > 1: + remain = xf[idx] - self.model.factors["group_size"][idx] + xf[idx] -= remain + xf += int(np.floor(remain / n)) + short_idx = np.argmax(np.array(self.model.factors["group_size"]) - xf) + rr = remain - int(np.floor(remain / 3) * n) + if rr > 0: + xf[short_idx] += rr + f = np.divide(xf, self.model.factors["group_size"]) + else: + break + + xf = tuple(xf) + f = tuple(f) + + print('initial f, v: ', f, v) + + # Final decision variable freq_vac: + dx = f + v + + return dx + + +# Sub-problem 3: problem that consider different protection weight for different groups. +class CovidMinInfectVac3(Problem): + """ + Base class to implement simulation-optimization problems. + This problem studies the case when different groups are influenced by the disease to various degree. + To study this problem, one need to modify the factor "w" in model classes to assign a protection weight for each group. + + Attributes + ---------- + name : string + name of problem + dim : int + number of decision variables + n_objectives : int + number of objectives + n_stochastic_constraints : int + number of stochastic constraints + minmax : tuple of int (+/- 1) + indicator of maximization (+1) or minimization (-1) for each objective + constraint_type : string + description of constraints types: + "unconstrained", "box", "deterministic", "stochastic" + variable_type : string + description of variable types: + "discrete", "continuous", "mixed" + lower_bounds : tuple + lower bound for each decision variable + upper_bounds : tuple + upper bound for each decision variable + Ci : ndarray (or None) + Coefficient matrix for linear inequality constraints of the form Ci@x <= di + Ce : ndarray (or None) + Coefficient matrix for linear equality constraints of the form Ce@x = de + di : ndarray (or None) + Constraint vector for linear inequality constraints of the form Ci@x <= di + de : ndarray (or None) + Constraint vector for linear equality constraints of the form Ce@x = de + gradient_available : bool + indicates if gradient of objective function is available + optimal_value : float + optimal objective function value + optimal_solution : tuple + optimal solution + model : Model object + associated simulation model that generates replications + model_default_factors : dict + default values for overriding model-level default factors + model_fixed_factors : dict + combination of overriden model-level factors and defaults + model_decision_factors : set of str + set of keys for factors that are decision variables + rng_list : list of rng.MRG32k3a objects + list of RNGs used to generate a random initial solution + or a random problem instance + factors : dict + changeable factors of the problem + initial_solution : tuple + default initial solution from which solvers start + budget : int > 0 + max number of replications (fn evals) for a solver to take + specifications : dict + details of each factor (for GUI, data validation, and defaults) + + Arguments + --------- + name : str + user-specified name for problem + fixed_factors : dict + dictionary of user-specified problem factors + model_fixed factors : dict + subset of user-specified non-decision factors to pass through to the model + + See also + -------- + base.Problem + """ + def __init__(self, name="COVID-vac-test-3", fixed_factors={}, model_fixed_factors={}): + self.name = name + self.n_objectives = 1 + self.n_stochastic_constraints = 0 + self.minmax = (-1,) + self.constraint_type = "box" + self.variable_type = "continuous" + self.gradient_available = True + self.optimal_value = None + self.optimal_solution = None + self.model_default_factors = {} + self.model_fixed_factors = {} + self.model_decision_factors = {"freq_vac"} + self.factors = fixed_factors + self.specifications = { + "initial_solution": { + "description": "Initial solution from which solvers start.", + "datatype": tuple, + "default": (0/7, 0/7, 0/7, 0, 0, 0) + }, + "budget": { + "description": "Max # of replications for a solver to take.", + "datatype": int, + "default": 600 + }, + "vaccine_cap": { + "description": "Maximum number of vaccines.", + "datatype": int, + "default": 8000 + }, + "testing_cap": { + "description": "Maximum testing capacity per day.", + "datatype": int, + "default": 5000 + }, + "pen_coef": { + "description": "Penalty coefficient.", + "datatype": int, + "default": 100000 + }, + } + self.check_factor_list = { + "initial_solution": self.check_initial_solution, + "budget": self.check_budget, + "testing_cap": self.check_testing_cap, + "vaccine_cap": self.check_vaccine_cap, + "pen_coef": self.check_pen_coef + } + super().__init__(fixed_factors, model_fixed_factors) + # Instantiate model with fixed factors and overwritten defaults. + self.model = COVID_vac(self.model_fixed_factors) + self.dim = len(self.model.factors["group_size"]) + self.lower_bounds = (0,) * self.dim + self.upper_bounds = (1,) * self.dim + self.Ci = None + self.Ce = None + self.di = None + self.de = None + + def check_vaccine_cap(self): + return self.factors["vaccine_cap"] > 0 + + def check_testing_cap(self): + return self.factors["testing_cap"] > 0 + + def check_pen_coef(self): + return self.factors["pen_coef"] > 0 + + def vector_to_factor_dict(self, vector): + """ + Convert a vector of variables to a dictionary with factor keys + + Arguments + --------- + vector : tuple + vector of values associated with decision variables + + Returns + ------- + factor_dict : dictionary + dictionary with factor keys and associated values + """ + factor_dict = { + "freq_vac": vector + } + return factor_dict + + def factor_dict_to_vector(self, factor_dict): + """ + Convert a dictionary with factor keys to a vector + of variables. + + Arguments + --------- + factor_dict : dictionary + dictionary with factor keys and associated values + + Returns + ------- + vector : tuple + vector of values associated with decision variables + """ + vector = (factor_dict["freq_vac"], ) + return vector + + def response_dict_to_objectives(self, response_dict): + """ + Convert a dictionary with response keys to a vector + of objectives. + + Arguments + --------- + response_dict : dictionary + dictionary with response keys and associated values + + Returns + ------- + objectives : tuple + vector of objectives + """ + objectives = (response_dict["total_infected"], ) # here, we use the weighted number of infected people as objective; + return objectives + + def response_dict_to_stoch_constraints(self, response_dict): + """ + Convert a dictionary with response keys to a vector + of left-hand sides of stochastic constraints: E[Y] >= 0 + + Arguments + --------- + response_dict : dictionary + dictionary with response keys and associated values + + Returns + ------- + stoch_constraints : tuple + vector of LHSs of stochastic constraint + """ + stoch_constraints = None + return stoch_constraints + + def deterministic_objectives_and_gradients(self, x): + """ + Compute deterministic components of objectives for a solution `x`. + + Arguments + --------- + x : tuple + vector of decision variables + + Returns + ------- + det_objectives : tuple + vector of deterministic components of objectives + det_objectives_gradients : tuple + vector of gradients of deterministic components of objectives + """ + # Checking: + # print(self.factors['pen_coef']) + # for g in range(self.dim): + # print(np.dot(self.model.factors["group_size"][g],x[g])) + # print(np.sum(np.dot(self.model.factors["group_size"][g],x[g]) for g in range(self.dim))) + # print(max(np.sum(np.dot(self.model.factors["group_size"][g],x[g]) for g in range(self.dim)) - self.factors["vaccine_cap"],0)) + + x_v = x[self.dim: self.dim * 2] + x_t = x[: self.dim] + det_objectives_test = (self.factors["pen_coef"] * (max(np.sum(np.ceil(np.dot(self.model.factors["group_size"][g], x_t[g])) for g in range(self.dim)) - self.factors["testing_cap"], 0)),) + det_objectives_vac = (self.factors["pen_coef"] * (max(np.sum(np.ceil(np.dot(self.model.factors["group_size"][g], x_v[g])) for g in range(self.dim)) - self.factors["vaccine_cap"], 0)),) + det_objectives = max(det_objectives_test, det_objectives_vac) + det_objectives_gradients = ((0,),) + return det_objectives, det_objectives_gradients + + def deterministic_stochastic_constraints_and_gradients(self, x): + """ + Compute deterministic components of stochastic constraints + for a solution `x`. + + Arguments + --------- + x : tuple + vector of decision variables + + Returns + ------- + det_stoch_constraints : tuple + vector of deterministic components of stochastic constraints + det_stoch_constraints_gradients : tuple + vector of gradients of deterministic components of + stochastic constraints + """ + det_stoch_constraints = None + det_stoch_constraints_gradients = None + return det_stoch_constraints, det_stoch_constraints_gradients + + def check_deterministic_constraints(self, x): + """ + Check if a solution `x` satisfies the problem's deterministic + constraints. + + Arguments + --------- + x : tuple + vector of decision variables + + Returns + ------- + satisfies : bool + indicates if solution `x` satisfies the deterministic constraints. + """ + return np.all(x >= 0) + + def get_random_solution(self, rand_sol_rng): + """ + Generate a random solution for starting or restarting solvers. + + Arguments + --------- + rand_sol_rng : rng.MRG32k3a object + random-number generator used to sample a new random solution + + Returns + ------- + x : tuple + vector of decision variables + """ + # If uniformly find freq & vac: + # x = tuple([rand_sol_rng.uniform(0,1) for _ in range(self.dim)]) + # f = tuple([rand_sol_rng.uniform(0,1) for _ in range(self.dim)]) + # dx = f + x + + # By redistribution method: (reallocate the resource(vac/freq) if some group have more resource than their population size) + # Linear constraint + # For vaccine: + x = tuple(rand_sol_rng.integer_random_vector_from_simplex(self.model.factors["num_groups"], self.factors["vaccine_cap"])) + v = np.divide(x, self.model.factors["group_size"]) + + x = np.array(x) # For the temporal calculation + v = np.array(v) + + n = len(self.model.factors["group_size"]) + while True: + xn = x - np.array(self.model.factors["group_size"]) + idx = np.argmax(xn) + if v[idx] > 1: + remain = x[idx] - self.model.factors["group_size"][idx] + x[idx] -= remain + x += int(np.floor(remain / n)) + short_idx = np.argmax(np.array(self.model.factors["group_size"]) - x) + rr = remain - int(np.floor(remain / 3) * n) + if rr > 0: + x[short_idx] += rr + v = np.divide(x, self.model.factors["group_size"]) + else: + break + + x = tuple(x) + v = tuple(v) + + # If modify testing freq by redistribution, for testing: + xf = tuple(rand_sol_rng.integer_random_vector_from_simplex(self.model.factors["num_groups"], self.factors["testing_cap"])) + f = np.divide(xf, self.model.factors["group_size"]) + + xf = np.array(xf) # For the temporal calculation + f = np.array(f) + + n = len(self.model.factors["group_size"]) + while True: + xn = xf - np.array(self.model.factors["group_size"]) + idx = np.argmax(xn) + if f[idx] > 1: + remain = xf[idx] - self.model.factors["group_size"][idx] + xf[idx] -= remain + xf += int(np.floor(remain / n)) + short_idx = np.argmax(np.array(self.model.factors["group_size"]) - xf) + rr = remain - int(np.floor(remain / 3) * n) + if rr > 0: + xf[short_idx] += rr + f = np.divide(xf, self.model.factors["group_size"]) + else: + break + + xf = tuple(xf) + f = tuple(f) + + print('initial f, v: ', f, v) + + # Final decision variable freq_vac: + dx = f + v + + return dx + + +# Sub-problem 4: with given testing frequency for each group, find the optimal vaccination policy. +class CovidMinInfectVac4(Problem): + """ + Base class to implement simulation-optimization problems. + + Attributes + ---------- + name : string + name of problem + dim : int + number of decision variables + n_objectives : int + number of objectives + n_stochastic_constraints : int + number of stochastic constraints + minmax : tuple of int (+/- 1) + indicator of maximization (+1) or minimization (-1) for each objective + constraint_type : string + description of constraints types: + "unconstrained", "box", "deterministic", "stochastic" + variable_type : string + description of variable types: + "discrete", "continuous", "mixed" + lower_bounds : tuple + lower bound for each decision variable + upper_bounds : tuple + upper bound for each decision variable + Ci : ndarray (or None) + Coefficient matrix for linear inequality constraints of the form Ci@x <= di + Ce : ndarray (or None) + Coefficient matrix for linear equality constraints of the form Ce@x = de + di : ndarray (or None) + Constraint vector for linear inequality constraints of the form Ci@x <= di + de : ndarray (or None) + Constraint vector for linear equality constraints of the form Ce@x = de + gradient_available : bool + indicates if gradient of objective function is available + optimal_value : float + optimal objective function value + optimal_solution : tuple + optimal solution + model : Model object + associated simulation model that generates replications + model_default_factors : dict + default values for overriding model-level default factors + model_fixed_factors : dict + combination of overriden model-level factors and defaults + model_decision_factors : set of str + set of keys for factors that are decision variables + rng_list : list of rng.MRG32k3a objects + list of RNGs used to generate a random initial solution + or a random problem instance + factors : dict + changeable factors of the problem + initial_solution : tuple + default initial solution from which solvers start + budget : int > 0 + max number of replications (fn evals) for a solver to take + specifications : dict + details of each factor (for GUI, data validation, and defaults) + + Arguments + --------- + name : str + user-specified name for problem + fixed_factors : dict + dictionary of user-specified problem factors + model_fixed factors : dict + subset of user-specified non-decision factors to pass through to the model + + See also + -------- + base.Problem + """ + def __init__(self, name="COVID-vac-test-4", fixed_factors={}, model_fixed_factors={}): + self.name = name + self.n_objectives = 1 + self.n_stochastic_constraints = 0 + self.minmax = (-1,) + self.constraint_type = "box" + self.variable_type = "continuous" + self.gradient_available = True + self.optimal_value = None + self.optimal_solution = None + self.model_default_factors = {} + self.model_fixed_factors = {} + self.model_decision_factors = {"freq_vac"} + self.factors = fixed_factors + self.specifications = { + "initial_solution": { + "description": "Initial solution from which solvers start.", + "datatype": tuple, + "default": (1/7, 1/7, 1/7, 0, 0, 0) + }, + "budget": { + "description": "Max # of replications for a solver to take.", + "datatype": int, + "default": 600 + }, + "vaccine_cap": { + "description": "Maximum number of vaccines.", + "datatype": int, + "default": 8000 + }, + "testing_cap": { + "description": "Maximum testing capacity per day.", + "datatype": int, + "default": 5000 + }, + "testing_freq": { + "description": "Testing frequency for each group each day.", + "datatype": tuple, + "default": (1/7, 1/7, 1/7) + }, + "pen_coef": { + "description": "Penalty coefficient.", + "datatype": int, + "default": 100000 + }, + } + self.check_factor_list = { + "initial_solution": self.check_initial_solution, + "budget": self.check_budget, + "testing_cap": self.check_testing_cap, + "vaccine_cap": self.check_vaccine_cap, + "testing_freq": self.check_testing_freq, + "pen_coef": self.check_pen_coef + } + super().__init__(fixed_factors, model_fixed_factors) + # Instantiate model with fixed factors and overwritten defaults. + self.model = COVID_vac(self.model_fixed_factors) + self.dim = len(self.model.factors["group_size"]) + self.lower_bounds = (0,) * self.dim + self.upper_bounds = (1,) * self.dim + self.Ci = None + self.Ce = None + self.di = None + self.de = None + + def check_vaccine_cap(self): + return self.factors["vaccine_cap"] > 0 + + def check_testing_cap(self): + return self.factors["testing_cap"] > 0 + + def check_testing_freq(self): + return all(np.array(self.factors["testing_freq"]) >= 0) + + def check_pen_coef(self): + return self.factors["pen_coef"] > 0 + + def vector_to_factor_dict(self, vector): + """ + Convert a vector of variables to a dictionary with factor keys + + Arguments + --------- + vector : tuple + vector of values associated with decision variables + + Returns + ------- + factor_dict : dictionary + dictionary with factor keys and associated values + """ + factor_dict = { + "freq_vac": vector + } + return factor_dict + + def factor_dict_to_vector(self, factor_dict): + """ + Convert a dictionary with factor keys to a vector + of variables. + + Arguments + --------- + factor_dict : dictionary + dictionary with factor keys and associated values + + Returns + ------- + vector : tuple + vector of values associated with decision variables + """ + vector = (factor_dict["freq_vac"], ) + return vector + + def response_dict_to_objectives(self, response_dict): + """ + Convert a dictionary with response keys to a vector + of objectives. + + Arguments + --------- + response_dict : dictionary + dictionary with response keys and associated values + + Returns + ------- + objectives : tuple + vector of objectives + """ + objectives = (response_dict["total_infected"], ) + return objectives + + def response_dict_to_stoch_constraints(self, response_dict): + """ + Convert a dictionary with response keys to a vector + of left-hand sides of stochastic constraints: E[Y] >= 0 + + Arguments + --------- + response_dict : dictionary + dictionary with response keys and associated values + + Returns + ------- + stoch_constraints : tuple + vector of LHSs of stochastic constraint + """ + stoch_constraints = None + return stoch_constraints + + def deterministic_objectives_and_gradients(self, x): + """ + Compute deterministic components of objectives for a solution `x`. + + Arguments + --------- + x : tuple + vector of decision variables + + Returns + ------- + det_objectives : tuple + vector of deterministic components of objectives + det_objectives_gradients : tuple + vector of gradients of deterministic components of objectives + """ + # Checking: + # print(self.factors['pen_coef']) + # for g in range(self.dim): + # print(np.dot(self.model.factors["group_size"][g],x[g])) + # print(np.sum(np.dot(self.model.factors["group_size"][g],x[g]) for g in range(self.dim))) + # print(max(np.sum(np.dot(self.model.factors["group_size"][g],x[g]) for g in range(self.dim)) - self.factors["vaccine_cap"],0)) + + x_v = x[self.dim: self.dim * 2] + x_t = x[: self.dim] + det_objectives_test = (self.factors["pen_coef"] * (max(np.sum(np.ceil(np.dot(self.model.factors["group_size"][g], x_t[g])) for g in range(self.dim)) - self.factors["testing_cap"], 0)),) + det_objectives_vac = (self.factors["pen_coef"] * (max(np.sum(np.ceil(np.dot(self.model.factors["group_size"][g], x_v[g])) for g in range(self.dim)) - self.factors["vaccine_cap"], 0)),) + det_objectives = max(det_objectives_test, det_objectives_vac) + det_objectives_gradients = ((0,),) + return det_objectives, det_objectives_gradients + + def deterministic_stochastic_constraints_and_gradients(self, x): + """ + Compute deterministic components of stochastic constraints + for a solution `x`. + + Arguments + --------- + x : tuple + vector of decision variables + + Returns + ------- + det_stoch_constraints : tuple + vector of deterministic components of stochastic constraints + det_stoch_constraints_gradients : tuple + vector of gradients of deterministic components of + stochastic constraints + """ + det_stoch_constraints = None + det_stoch_constraints_gradients = None + return det_stoch_constraints, det_stoch_constraints_gradients + + def check_deterministic_constraints(self, x): + """ + Check if a solution `x` satisfies the problem's deterministic + constraints. + + Arguments + --------- + x : tuple + vector of decision variables + + Returns + ------- + satisfies : bool + indicates if solution `x` satisfies the deterministic constraints. + """ + return np.all(x >= 0) + + def get_random_solution(self, rand_sol_rng): + """ + Generate a random solution for starting or restarting solvers. + + Arguments + --------- + rand_sol_rng : rng.MRG32k3a object + random-number generator used to sample a new random solution + + Returns + ------- + x : tuple + vector of decision variables + """ + # If uniformly find freq & vac: + # x = tuple([rand_sol_rng.uniform(0,1) for _ in range(self.dim)]) + # f = tuple([rand_sol_rng.uniform(0,1) for _ in range(self.dim)]) + # dx = f + x + + # By redistribution method: (reallocate the resource(vac/freq) if some group have more resource than their population size) + # Linear constraint + # For vaccine: + x = tuple(rand_sol_rng.integer_random_vector_from_simplex(self.model.factors["num_groups"], self.factors["vaccine_cap"])) + v = np.divide(x, self.model.factors["group_size"]) + + x = np.array(x) # For the temporal calculation + v = np.array(v) + + n = len(self.model.factors["group_size"]) + while True: + xn = x - np.array(self.model.factors["group_size"]) + idx = np.argmax(xn) + if v[idx] > 1: + remain = x[idx] - self.model.factors["group_size"][idx] + x[idx] -= remain + x += int(np.floor(remain / n)) + short_idx = np.argmax(np.array(self.model.factors["group_size"]) - x) + rr = remain - int(np.floor(remain / 3) * n) + if rr > 0: + x[short_idx] += rr + v = np.divide(x, self.model.factors["group_size"]) + else: + break + + x = tuple(x) + v = tuple(v) + + # with given testing policy for the period: + f = self.factors["testing_freq"] + + xf = tuple(xf) + f = tuple(f) + + print('initial f, v: ', f, v) + + # Final decision variable freq_vac: + dx = f + v + + return dx \ No newline at end of file diff --git a/simopt/models/san.py b/simopt/models/san.py index 8d219cd3f..966255e01 100644 --- a/simopt/models/san.py +++ b/simopt/models/san.py @@ -129,7 +129,7 @@ def replicate(self, rng_list): graph_in[a[1]].add(a[0]) graph_out[a[0]].add(a[1]) indegrees = [len(graph_in[n]) for n in range(1, self.factors["num_nodes"] + 1)] - # outdegrees = [len(graph_out[n]) for n in range(1, self.factors["num_nodes"]+1)] + queue = [] topo_order = [] for n in range(self.factors["num_nodes"]): @@ -212,6 +212,14 @@ class SANLongestPath(Problem): lower bound for each decision variable upper_bounds : tuple upper bound for each decision variable + Ci : ndarray (or None) + Coefficient matrix for linear inequality constraints of the form Ci@x <= di + Ce : ndarray (or None) + Coefficient matrix for linear equality constraints of the form Ce@x = de + di : ndarray (or None) + Constraint vector for linear inequality constraints of the form Ci@x <= di + de : ndarray (or None) + Constraint vector for linear equality constraints of the form Ce@x = de gradient_available : bool indicates if gradient of objective function is available optimal_value : tuple @@ -277,12 +285,12 @@ def __init__(self, name="SAN-1", fixed_factors=None, model_fixed_factors=None): "budget": { "description": "max # of replications for a solver to take", "datatype": int, - "default": 10000 + "default": 2000 }, "arc_costs": { "description": "Cost associated to each arc.", "datatype": tuple, - "default": (1,) * 13 + "default": (1, ) * 13 } } self.check_factor_list = { @@ -294,8 +302,12 @@ def __init__(self, name="SAN-1", fixed_factors=None, model_fixed_factors=None): # Instantiate model with fixed factors and over-riden defaults. self.model = SAN(self.model_fixed_factors) self.dim = len(self.model.factors["arcs"]) - self.lower_bounds = (1e-2,) * self.dim - self.upper_bounds = (np.inf,) * self.dim + self.lower_bounds = (1e-2, ) * self.dim + self.upper_bounds = (np.inf, ) * self.dim + self.Ci = None + self.Ce = None + self.di = None + self.de = None def check_arc_costs(self): positive = True @@ -448,3 +460,295 @@ def get_random_solution(self, rand_sol_rng): """ x = tuple([rand_sol_rng.lognormalvariate(lq=0.1, uq=10) for _ in range(self.dim)]) return x + + +""" +Summary +------- +Minimize the duration of the longest path from a to i subject to a lower bound in sum of arc_means. +""" + + +class SANLongestPathConstr(Problem): + """ + Base class to implement simulation-optimization problems. + + Attributes + ---------- + name : string + name of problem + dim : int + number of decision variables + n_objectives : int + number of objectives + n_stochastic_constraints : int + number of stochastic constraints + minmax : tuple of int (+/- 1) + indicator of maximization (+1) or minimization (-1) for each objective + constraint_type : string + description of constraints types: + "unconstrained", "box", "deterministic", "stochastic" + variable_type : string + description of variable types: + "discrete", "continuous", "mixed" + lower_bounds : tuple + lower bound for each decision variable + upper_bounds : tuple + upper bound for each decision variable + Ci : ndarray (or None) + Coefficient matrix for linear inequality constraints of the form Ci@x <= di + Ce : ndarray (or None) + Coefficient matrix for linear equality constraints of the form Ce@x = de + di : ndarray (or None) + Constraint vector for linear inequality constraints of the form Ci@x <= di + de : ndarray (or None) + Constraint vector for linear equality constraints of the form Ce@x = de + gradient_available : bool + indicates if gradient of objective function is available + optimal_value : tuple + optimal objective function value + optimal_solution : tuple + optimal solution + model : Model object + associated simulation model that generates replications + model_default_factors : dict + default values for overriding model-level default factors + model_fixed_factors : dict + combination of overriden model-level factors and defaults + model_decision_factors : set of str + set of keys for factors that are decision variables + rng_list : list of mrg32k3a.mrg32k3a.MRG32k3a objects + list of RNGs used to generate a random initial solution + or a random problem instance + factors : dict + changeable factors of the problem + initial_solution : list + default initial solution from which solvers start + budget : int > 0 + max number of replications (fn evals) for a solver to take + specifications : dict + details of each factor (for GUI, data validation, and defaults) + + Arguments + --------- + name : str + user-specified name for problem + fixed_factors : dict + dictionary of user-specified problem factors + model_fixed factors : dict + subset of user-specified non-decision factors to pass through to the model + + See also + -------- + base.Problem + """ + def __init__(self, name="SAN-2", fixed_factors=None, model_fixed_factors=None): + if fixed_factors is None: + fixed_factors = {} + if model_fixed_factors is None: + model_fixed_factors = {} + self.name = name + self.n_objectives = 1 + self.n_stochastic_constraints = 0 + self.minmax = (-1,) + self.constraint_type = "box" + self.variable_type = "continuous" + self.gradient_available = True + self.optimal_value = None + self.optimal_solution = None + self.model_default_factors = {} + self.model_decision_factors = {"arc_means"} + self.factors = fixed_factors + self.specifications = { + "initial_solution": { + "description": "initial solution", + "datatype": tuple, + "default": (8,) * 13 + }, + "budget": { + "description": "max # of replications for a solver to take", + "datatype": int, + "default": 2000 + }, + "arc_costs": { + "description": "Cost associated to each arc.", + "datatype": tuple, + "default": (1,) * 13 + }, + "sum_lb": { + "description": "Lower bound for the sum of arc means", + "datatype": float, + "default": 30.0 + } + } + self.check_factor_list = { + "initial_solution": self.check_initial_solution, + "budget": self.check_budget, + "arc_costs": self.check_arc_costs + } + super().__init__(fixed_factors, model_fixed_factors) + # Instantiate model with fixed factors and over-riden defaults. + self.model = SAN(self.model_fixed_factors) + self.dim = len(self.model.factors["arcs"]) + self.lower_bounds = (1e-2,) * self.dim + self.upper_bounds = (np.inf,) * self.dim + self.Ci = -1 * np.ones(13) + self.Ce = None + self.di = np.array(-[self.factors["sum_lb"]]) + self.de = None + + def check_arc_costs(self): + positive = True + for x in list(self.factors["arc_costs"]): + positive = positive & x > 0 + return (len(self.factors["arc_costs"]) != self.model.factors["num_arcs"]) & positive + + def vector_to_factor_dict(self, vector): + """ + Convert a vector of variables to a dictionary with factor keys + + Arguments + --------- + vector : tuple + vector of values associated with decision variables + + Returns + ------- + factor_dict : dictionary + dictionary with factor keys and associated values + """ + factor_dict = { + "arc_means": vector[:] + } + return factor_dict + + def factor_dict_to_vector(self, factor_dict): + """ + Convert a dictionary with factor keys to a vector + of variables. + + Arguments + --------- + factor_dict : dictionary + dictionary with factor keys and associated values + + Returns + ------- + vector : tuple + vector of values associated with decision variables + """ + vector = tuple(factor_dict["arc_means"]) + return vector + + def response_dict_to_objectives(self, response_dict): + """ + Convert a dictionary with response keys to a vector + of objectives. + + Arguments + --------- + response_dict : dictionary + dictionary with response keys and associated values + + Returns + ------- + objectives : tuple + vector of objectives + """ + objectives = (response_dict["longest_path_length"],) + return objectives + + def response_dict_to_stoch_constraints(self, response_dict): + """ + Convert a dictionary with response keys to a vector + of left-hand sides of stochastic constraints: E[Y] <= 0 + + Arguments + --------- + response_dict : dictionary + dictionary with response keys and associated values + + Returns + ------- + stoch_constraints : tuple + vector of LHSs of stochastic constraint + """ + stoch_constraints = None + return stoch_constraints + + def deterministic_stochastic_constraints_and_gradients(self, x): + """ + Compute deterministic components of stochastic constraints for a solution `x`. + + Arguments + --------- + x : tuple + vector of decision variables + + Returns + ------- + det_stoch_constraints : tuple + vector of deterministic components of stochastic constraints + det_stoch_constraints_gradients : tuple + vector of gradients of deterministic components of stochastic constraints + """ + det_stoch_constraints = None + det_stoch_constraints_gradients = ((0,) * self.dim,) # tuple of tuples – of sizes self.dim by self.dim, full of zeros + return det_stoch_constraints, det_stoch_constraints_gradients + + def deterministic_objectives_and_gradients(self, x): + """ + Compute deterministic components of objectives for a solution `x`. + + Arguments + --------- + x : tuple + vector of decision variables + + Returns + ------- + det_objectives : tuple + vector of deterministic components of objectives + det_objectives_gradients : tuple + vector of gradients of deterministic components of objectives + """ + det_objectives = (0,) + det_objectives_gradients = ((0,) * self.dim,) + return det_objectives, det_objectives_gradients + + def check_deterministic_constraints(self, x): + """ + Check if a solution `x` satisfies the problem's deterministic constraints. + + Arguments + --------- + x : tuple + vector of decision variables + + Returns + ------- + satisfies : bool + indicates if solution `x` satisfies the deterministic constraints. + """ + return np.all(np.array(x) >= 0) + + def get_random_solution(self, rand_sol_rng): + """ + Generate a random solution for starting or restarting solvers. + + Arguments + --------- + rand_sol_rng : mrg32k3a.mrg32k3a.MRG32k3a object + random-number generator used to sample a new random solution + + Returns + ------- + x : tuple + vector of decision variables + """ + while True: + x = [rand_sol_rng.lognormalvariate(lq = 0.1, uq = 10) for _ in range(self.dim)] + if np.sum(x) >= self.factors['sum_lb']: + break + x= tuple(x) + return x diff --git a/simopt/models/smf.py b/simopt/models/smf.py new file mode 100644 index 000000000..aa21f853e --- /dev/null +++ b/simopt/models/smf.py @@ -0,0 +1,480 @@ +""" +Summary +------- +Simulate duration of a stochastic Max-Flow network (SMF). +A detailed description of the model/problem can be found +`here `_. +""" + +import numpy as np +from ortools.graph.python import max_flow +from ..base import Model, Problem + + +class SMF(Model): + """ + A model that simulates a stochastic Max-Flow problem with + capacities deducted with multivariate distributed noise distributed durations + + Attributes + ---------- + name : string + name of model + n_rngs : int + number of random-number generators used to run a simulation replication + n_responses : int + number of responses (performance measures) + factors : dict + changeable factors of the simulation model + specifications : dict + details of each factor (for GUI and data validation) + check_factor_list : dict + switch case for checking factor simulatability + + Arguments + --------- + fixed_factors : nested dict + fixed factors of the simulation model + + See also + -------- + base.Model + """ + def __init__(self, fixed_factors=None): + if fixed_factors is None: + fixed_factors = {} + self.name = "SMF" + self.n_rngs = 1 + self.n_responses = 1 + cov_fac = np.zeros((20, 20)) + np.fill_diagonal(cov_fac, 4) + cov_fac = cov_fac.tolist() + self.specifications = { + "num_nodes": { + "description": "number of nodes, 0 being the source, highest being the sink", + "datatype": int, + "default": 10 + }, + "source_index": { + "description": "source node index", + "datatype": int, + "default": 0 + }, + "sink_index": { + "description": "sink node index", + "datatype": int, + "default": 9 + }, + "arcs": { + "description": "list of arcs", + "datatype": list, + "default": [(0, 1), (0, 2), (0, 3), (1, 2), (1, 4), (2, 4), (4, 2), (3, 2), (2, 5), (4, 5), (3, 6), (3, 7), (6, 2), (6, 5), (6, 7), (5, 8), (6, 8), (6, 9), (7, 9), (8, 9)] + }, + "assigned_capacities": { + "description": "Assigned capacity of each arc", + "datatype": list, + "default": [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5] + }, + "mean_noise": { + "description": "The mean noise in reduction of arc capacities", + "datatype": list, + "default": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + }, + "cov_noise": { + "description": "Covariance matrix of noise", + "datatype": list, + "default": cov_fac + } + + } + self.check_factor_list = { + "num_nodes": self.check_num_nodes, + "arcs": self.check_arcs, + "assigned_capacities": self.check_capacities, + "mean_noise": self.check_mean, + "cov_noise": self.check_cov, + "source_index": self.check_s, + "sink_index": self.check_t + } + # Set factors of the simulation model. + super().__init__(fixed_factors) + + def check_num_nodes(self): + return self.factors["num_nodes"] > 0 + + def dfs(self, graph, start, visited=None): + if visited is None: + visited = set() + visited.add(start) + for next in graph[start] - visited: + self.dfs(graph, next, visited) + return visited + + def check_arcs(self): + if len(self.factors["arcs"]) <= 0: + return False + # Check source is connected to the sink. + graph = {node: set() for node in range(0, self.factors["num_nodes"])} + for a in self.factors["arcs"]: + graph[a[0]].add(a[1]) + visited = self.dfs(graph, self.factors["source_index"]) + if self.factors["source_index"] in visited and self.factors["sink_index"] in visited: + return True + return False + + def check_capacities(self): + positive = True + for x in list(self.factors["assigned_capacities"]): + positive = positive & (x > 0) + return (len(self.factors["assigned_capacities"]) == len(self.factors["arcs"])) & positive + + def check_mean(self): + return len(self.factors["mean_noise"]) == len(self.factors["arcs"]) + + def check_cov(self): + return np.array(self.factors["cov_noise"]).shape == (len(self.factors["arcs"]), len(self.factors["arcs"])) + + def check_s(self): + return self.factors["source_index"] >= 0 and self.factors["source_index"] <= self.factors["num_nodes"] + + def check_t(self): + return self.factors["sink_index"] >= 0 and self.factors["sink_index"] <= self.factors["num_nodes"] + + def replicate(self, rng_list): + """ + Simulate a single replication for the current model factors. + + Arguments + --------- + rng_list : list of mrg32k3a.mrg32k3a.MRG32k3a + rngs for model to use when simulating a replication + + Returns + ------- + responses : dict + performance measures of interest + "longest_path_length" = length/duration of longest path + gradients : dict of dicts + gradient estimates for each response + """ + # Designate separate random number generators. + solver = max_flow.SimpleMaxFlow() + exp_rng = rng_list[0] + # From input graph generate start end end nodes. + start_nodes = [] + end_nodes = [] + for i, j in self.factors["arcs"]: + start_nodes.append(i) + end_nodes.append(j) + # Generate actual capacity. + for i in range(len(self.factors["arcs"])): + noise = exp_rng.mvnormalvariate(self.factors["mean_noise"], np.array(self.factors["cov_noise"])) + capacities = [] + for i in range(len(noise)): + capacities.append(max(1000 * (self.factors["assigned_capacities"][i] - noise[i]), 0)) + # Add arcs in bulk. + solver.add_arcs_with_capacity(start_nodes, end_nodes, capacities) + status = solver.solve(self.factors["source_index"], self.factors["sink_index"]) + if status != solver.OPTIMAL: + print('There was an issue with the max flow input.') + print(f'Status: {status}') + exit(1) + + # Construct gradient vector (=1 if has a outflow from min-cut nodes). + gradient = np.zeros(len(self.factors["arcs"])) + grad_arclist = [] + min_cut_nodes = solver.get_source_side_min_cut() + for i in min_cut_nodes: + for j in range(self.factors['num_nodes']): + if j not in min_cut_nodes: + grad_arc = (i, j) + if (i, j) in self.factors['arcs']: + grad_arclist.append(grad_arc) + for arc in grad_arclist: + gradient[self.factors['arcs'].index(arc)] = 1 + + responses = {"Max Flow": solver.optimal_flow() / 1000} + gradients = {response_key: {factor_key: np.nan for factor_key in self.specifications} for response_key in responses} + gradients["Max Flow"]["assigned_capacities"] = gradient + return responses, gradients + + +""" +Summary +------- +Maximize the expected max flow from the source node s to the sink node t. +""" + + +class SMF_Max(Problem): + """ + Base class to implement simulation-optimization problems. + + Attributes + ---------- + name : string + name of problem + dim : int + number of decision variables + n_objectives : int + number of objectives + n_stochastic_constraints : int + number of stochastic constraints + minmax : tuple of int (+/- 1) + indicator of maximization (+1) or minimization (-1) for each objective + constraint_type : string + description of constraints types: + "unconstrained", "box", "deterministic", "stochastic" + variable_type : string + description of variable types: + "discrete", "continuous", "mixed" + lower_bounds : tuple + lower bound for each decision variable + upper_bounds : tuple + upper bound for each decision variable + Ci : ndarray (or None) + Coefficient matrix for linear inequality constraints of the form Ci@x <= di + Ce : ndarray (or None) + Coefficient matrix for linear equality constraints of the form Ce@x = de + di : ndarray (or None) + Constraint vector for linear inequality constraints of the form Ci@x <= di + de : ndarray (or None) + Constraint vector for linear equality constraints of the form Ce@x = de + gradient_available : bool + indicates if gradient of objective function is available + optimal_value : tuple + optimal objective function value + optimal_solution : tuple + optimal solution + model : Model object + associated simulation model that generates replications + model_default_factors : dict + default values for overriding model-level default factors + model_fixed_factors : dict + combination of overriden model-level factors and defaults + model_decision_factors : set of str + set of keys for factors that are decision variables + rng_list : list of mrg32k3a.mrg32k3a.MRG32k3a objects + list of RNGs used to generate a random initial solution + or a random problem instance + factors : dict + changeable factors of the problem + initial_solution : list + default initial solution from which solvers start + budget : int > 0 + max number of replications (fn evals) for a solver to take + specifications : dict + details of each factor (for GUI, data validation, and defaults) + + Arguments + --------- + name : str + user-specified name for problem + fixed_factors : dict + dictionary of user-specified problem factors + model_fixed factors : dict + subset of user-specified non-decision factors to pass through to the model + + See also + -------- + base.Problem + """ + def __init__(self, name="SMF-1", fixed_factors=None, model_fixed_factors=None): + if fixed_factors is None: + fixed_factors = {} + if model_fixed_factors is None: + model_fixed_factors = {} + self.name = name + self.n_objectives = 1 + self.n_stochastic_constraints = 0 + self.minmax = (1, ) + self.constraint_type = "deterministic" + self.variable_type = "continuous" + self.gradient_available = True + self.optimal_value = None + self.optimal_solution = None + self.model_default_factors = {} + self.model_decision_factors = {"assigned_capacities"} + self.factors = fixed_factors + self.specifications = { + "initial_solution": { + "description": "initial solution", + "datatype": tuple, + "default": (1, ) * 20 + }, + "budget": { + "description": "max # of replications for a solver to take", + "datatype": int, + "default": 10000 + }, + "cap": { + "description": "total set-capacity to be allocated to arcs.", + "datatype": int, + "default": 100 + } + } + self.check_factor_list = { + "initial_solution": self.check_initial_solution, + "budget": self.check_budget, + "cap": self.check_cap + } + super().__init__(fixed_factors, model_fixed_factors) + # Instantiate model with fixed factors and over-riden defaults. + self.model = SMF(self.model_fixed_factors) + self.dim = len(self.model.factors["arcs"]) + self.lower_bounds = (0, ) * self.dim + self.upper_bounds = (np.inf, ) * self.dim + self.Ci = np.ones(20) + self.Ce = None + self.di = np.array([self.factors["cap"]]) + self.de = None + + def check_cap(self): + return self.factors["cap"] >= 0 + + def vector_to_factor_dict(self, vector): + """ + Convert a vector of variables to a dictionary with factor keys + + Arguments + --------- + vector : tuple + vector of values associated with decision variables + + Returns + ------- + factor_dict : dictionary + dictionary with factor keys and associated values + """ + factor_dict = { + "assigned_capacities": vector[:] + } + return factor_dict + + def factor_dict_to_vector(self, factor_dict): + """ + Convert a dictionary with factor keys to a vector + of variables. + + Arguments + --------- + factor_dict : dictionary + dictionary with factor keys and associated values + + Returns + ------- + vector : tuple + vector of values associated with decision variables + """ + vector = tuple(factor_dict["assigned_capacities"]) + return vector + + def response_dict_to_objectives(self, response_dict): + """ + Convert a dictionary with response keys to a vector + of objectives. + + Arguments + --------- + response_dict : dictionary + dictionary with response keys and associated values + + Returns + ------- + objectives : tuple + vector of objectives + """ + objectives = (response_dict["Max Flow"], ) + return objectives + + def response_dict_to_stoch_constraints(self, response_dict): + """ + Convert a dictionary with response keys to a vector + of left-hand sides of stochastic constraints: E[Y] <= 0 + + Arguments + --------- + response_dict : dictionary + dictionary with response keys and associated values + + Returns + ------- + stoch_constraints : tuple + vector of LHSs of stochastic constraint + """ + stoch_constraints = None + return stoch_constraints + + def deterministic_stochastic_constraints_and_gradients(self, x): + """ + Compute deterministic components of stochastic constraints for a solution `x`. + + Arguments + --------- + x : tuple + vector of decision variables + + Returns + ------- + det_stoch_constraints : tuple + vector of deterministic components of stochastic constraints + det_stoch_constraints_gradients : tuple + vector of gradients of deterministic components of stochastic constraints + """ + det_stoch_constraints = None + det_stoch_constraints_gradients = None + return det_stoch_constraints, det_stoch_constraints_gradients + + def deterministic_objectives_and_gradients(self, x): + """ + Compute deterministic components of objectives for a solution `x`. + + Arguments + --------- + x : tuple + vector of decision variables + + Returns + ------- + det_objectives : tuple + vector of deterministic components of objectives + det_objectives_gradients : tuple + vector of gradients of deterministic components of objectives + """ + det_objectives = (0, ) + det_objectives_gradients = ((0, ) * self.dim,) + return det_objectives, det_objectives_gradients + + def check_deterministic_constraints(self, x): + """ + Check if a solution `x` satisfies the problem's deterministic constraints. + + Arguments + --------- + x : tuple + vector of decision variables + + Returns + ------- + satisfies : bool + indicates if solution `x` satisfies the deterministic constraints. + """ + + return sum(self.factors["assigned_capacities"]) <= self.factors["cap"] + + def get_random_solution(self, rand_sol_rng): + """ + Generate a random solution for starting or restarting solvers. + + Arguments + --------- + rand_sol_rng : mrg32k3a.mrg32k3a.MRG32k3a object + random-number generator used to sample a new random solution + + Returns + ------- + x : tuple + vector of decision variables + """ + x = rand_sol_rng.continuous_random_vector_from_simplex(len(self.model.factors["arcs"]), self.factors["cap"], False) + return x diff --git a/simopt/solvers/active_set.py b/simopt/solvers/active_set.py new file mode 100644 index 000000000..dc620956c --- /dev/null +++ b/simopt/solvers/active_set.py @@ -0,0 +1,593 @@ +""" +Summary +------- +ACTIVESET: An active set algorithm for problems with linear constraints i.e., Ce@x = de, Ci@x <= di. +A detailed description of the solver can be found `here `_. +""" +import numpy as np +import cvxpy as cp +import warnings +warnings.filterwarnings("ignore") + +from ..base import Solver + + +class ACTIVESET(Solver): + """ + The Active Set solver. + + Attributes + ---------- + name : string + name of solver + objective_type : string + description of objective types: + "single" or "multi" + constraint_type : string + description of constraints types: + "unconstrained", "box", "deterministic", "stochastic" + variable_type : string + description of variable types: + "discrete", "continuous", "mixed" + gradient_needed : bool + indicates if gradient of objective function is needed + factors : dict + changeable factors (i.e., parameters) of the solver + specifications : dict + details of each factor (for GUI, data validation, and defaults) + rng_list : list of rng.MRG32k3a objects + list of RNGs used for the solver's internal purposes + + Arguments + --------- + name : str + user-specified name for solver + fixed_factors : dict + fixed_factors of the solver + + See also + -------- + base.Solver + """ + def __init__(self, name="ACTIVESET", fixed_factors={}): + self.name = name + self.objective_type = "single" + self.constraint_type = "deterministic" + self.variable_type = "continuous" + self.gradient_needed = False + self.specifications = { + "crn_across_solns": { + "description": "use CRN across solutions?", + "datatype": bool, + "default": True + }, + "r": { + "description": "number of replications taken at each solution", + "datatype": int, + "default": 30 + }, + "alpha": { + "description": "tolerance for sufficient decrease condition.", + "datatype": float, + "default": 0.2 + }, + "beta": { + "description": "step size reduction factor in line search.", + "datatype": float, + "default": 0.9 + }, + "alpha_max": { + "description": "maximum step size.", + "datatype": float, + "default": 10.0 + }, + "lambda": { + "description": "magnifying factor for r inside the finite difference function", + "datatype": int, + "default": 2 + }, + "tol": { + "description": "floating point tolerance for checking tightness of constraints", + "datatype": float, + "default": 1e-7 + }, + "tol2": { + "description": "floating point tolerance for checking closeness of dot product to zero", + "datatype": float, + "default": 1e-7 + }, + "finite_diff_step": { + "description": "step size for finite difference", + "datatype": float, + "default": 1e-5 + } + } + self.check_factor_list = { + "crn_across_solns": self.check_crn_across_solns, + "r": self.check_r, + "alpha": self.check_alpha, + "beta": self.check_beta, + "alpha_max": self.check_alpha_max, + "lambda": self.check_lambda, + "tol": self.check_tol, + "tol2": self.check_tol2, + "finite_diff_step": self.check_finite_diff_step + } + super().__init__(fixed_factors) + + def check_r(self): + return self.factors["r"] > 0 + + def check_alpha(self): + return self.factors["alpha"] > 0 + + def check_beta(self): + return self.factors["beta"] > 0 & self.factors["beta"] < 1 + + def check_alpha_max(self): + return self.factors["alpha_max"] > 0 + + def check_lambda(self): + return self.factors["lambda"] > 0 + + def check_tol(self): + return self.factors["tol"] > 0 + + def check_tol2(self): + return self.factors["tol2"] > 0 + + def check_finite_diff_step(self): + return self.factors["finite_diff_step"] > 0 + + def solve(self, problem): + """ + Run a single macroreplication of a solver on a problem. + + Arguments + --------- + problem : Problem object + simulation-optimization problem to solve + crn_across_solns : bool + indicates if CRN are used when simulating different solutions + + Returns + ------- + recommended_solns : list of Solution objects + list of solutions recommended throughout the budget + intermediate_budgets : list of ints + list of intermediate budgets when recommended solutions changes + """ + recommended_solns = [] + intermediate_budgets = [] + expended_budget = 0 + + # Default values. + r = self.factors["r"] + alpha = self.factors["alpha"] + beta = self.factors["beta"] + tol = self.factors["tol"] + tol2 = self.factors["tol2"] + max_step = self.factors["alpha_max"] # Maximum step size + + # Upper bound and lower bound. + lower_bound = np.array(problem.lower_bounds) + upper_bound = np.array(problem.upper_bounds) + + # Input inequality and equlaity constraint matrix and vector. + # Cix <= di + # Cex = de + Ci = problem.Ci + di = problem.di + Ce = problem.Ce + de = problem.de + + # Remove redundant upper/lower bounds. + ub_inf_idx = np.where(~np.isinf(upper_bound))[0] + lb_inf_idx = np.where(~np.isinf(lower_bound))[0] + + # Form a constraint coefficient matrix where all the equality constraints are put on top and + # all the bound constraints in the bottom and a constraint coefficient vector. + if (Ce is not None) and (de is not None) and (Ci is not None) and (di is not None): + C = np.vstack((Ce, Ci)) + d = np.vstack((de.T, di.T)) + elif (Ce is not None) and (de is not None): + C = Ce + d = de.T + elif (Ci is not None) and (di is not None): + C = Ci + d = di.T + else: + C = np.empty([problem.dim, 1]) + d = np.empty([1, 1]) + + if len(ub_inf_idx) > 0: + C = np.vstack((C, np.identity(upper_bound.shape[0]))) + d = np.vstack((d, upper_bound[np.newaxis].T)) + if len(lb_inf_idx) > 0: + C = np.vstack((C, -np.identity(lower_bound.shape[0]))) + d = np.vstack((d, -lower_bound[np.newaxis].T)) + + # Number of equality constraints. + if (Ce is not None) and (de is not None): + neq = len(de) + else: + neq = 0 + + # Checker for whether the problem is unconstrained. + unconstr_flag = (Ce is None) & (Ci is None) & (di is None) & (de is None) & (all(np.isinf(lower_bound))) & (all(np.isinf(upper_bound))) + + # Start with the initial solution. + new_solution = self.create_new_solution(problem.factors["initial_solution"], problem) + new_x = new_solution.x + + # If the initial solution is not feasible, generate one using phase one simplex. + if (not unconstr_flag) & (not self._feasible(new_x, problem, tol)): + new_x = self.find_feasible_initial(problem, Ce, Ci, de, di, tol) + new_solution = self.create_new_solution(tuple(new_x), problem) + + # Use r simulated observations to estimate the objective value. + problem.simulate(new_solution, r) + expended_budget += r + best_solution = new_solution + recommended_solns.append(new_solution) + intermediate_budgets.append(expended_budget) + + # Active constraint index vector. + acidx = [] + if not unconstr_flag: + # Initialize the active set to be the set of indices of the tight constraints. + cx = np.dot(C, new_x) + for j in range(cx.shape[0]): + if j < neq or np.isclose(cx[j], d[j], rtol=0, atol= tol): + acidx.append(j) + + while expended_budget < problem.factors["budget"]: + new_x = new_solution.x + # Check variable bounds. + forward = np.isclose(new_x, lower_bound, atol = tol).astype(int) + backward = np.isclose(new_x, upper_bound, atol = tol).astype(int) + # BdsCheck: 1 stands for forward, -1 stands for backward, 0 means central diff. + BdsCheck = np.subtract(forward, backward) + + if problem.gradient_available: + # Use IPA gradient if available. + grad = -1 * problem.minmax[0] * new_solution.objectives_gradients_mean[0] + else: + # Use finite difference to estimate gradient if IPA gradient is not available. + grad = self.finite_diff(new_solution, BdsCheck, problem, r, self.factors["finite_diff_step"]) + expended_budget += (2 * problem.dim - np.sum(BdsCheck != 0)) * r + # A while loop to prevent zero gradient + while np.all((grad == 0)): + if expended_budget > problem.factors["budget"]: + break + grad = self.finite_diff(new_solution, BdsCheck, problem, alpha, r) + expended_budget += (2 * problem.dim - np.sum(BdsCheck != 0)) * r + # Update r after each iteration. + r = int(self.factors["lambda"] * r) + + # If the active set is empty, search on negative gradient. + if len(acidx) == 0: + dir = -grad + else: + # Find the search direction and Lagrange multipliers of the direction-finding problem. + dir, lmbd, = self.compute_search_direction(acidx, grad, problem, C) + # If the optimal search direction is 0 + if (np.isclose(np.dot(grad, dir), 0, rtol=0, atol=tol2)): + # Terminate if Lagrange multipliers of the inequality constraints in the active set are all nonnegative. + if unconstr_flag or np.all(lmbd[neq:] >= 0): + break + # Otherwise, drop the inequality constraint in the active set with the most negative Lagrange multiplier. + else: + q = acidx[neq + np.argmin(lmbd[neq:][lmbd[neq:] < 0])] + acidx.remove(q) + else: + if not unconstr_flag: + idx = list(set(np.arange(C.shape[0])) - set(acidx)) # Constraints that are not in the active set. + # If all constraints are feasible. + if unconstr_flag or np.all(C[idx,:] @ dir <= 0): + # Line search to determine a step_size. + new_solution, step_size, expended_budget = self.line_search(problem, expended_budget, r, grad, new_solution, max_step, dir, alpha, beta) + # Update maximum step size for the next iteration. + max_step = step_size + + # Ratio test to determine the maximum step size possible + else: + # Get all indices not in the active set such that Ai^Td>0 + r_idx = list(set(idx).intersection(set((C @ dir > 0).nonzero()[0]))) + # Compute the ratio test + ra = d[r_idx,:].flatten() - C[r_idx, :] @ new_x + ra_d = C[r_idx, :] @ dir + # Initialize maximum step size. + s_star = np.inf + # Initialize blocking constraint index. + q = -1 + # Perform ratio test. + for i in range(len(ra)): + if ra_d[i] - tol > 0: + s = ra[i]/ra_d[i] + if s < s_star: + s_star = s + q = r_idx[i] + # If there is no blocking constraint (i.e., s_star >= 1) + if s_star >= 1: + # Line search to determine a step_size. + new_solution, step_size, expended_budget = self.line_search(problem, expended_budget, r, grad, new_solution, s_star, dir, alpha, beta) + # If there is a blocking constraint (i.e., s_star < 1) + else: + # Add blocking constraint to the active set. + if q not in acidx: + acidx.append(q) + # No need to do line search if s_star is 0. + if s_star > 0: + # Line search to determine a step_size. + new_solution, step_size, expended_budget = self.line_search(problem, expended_budget, r, grad, new_solution, s_star, dir, alpha, beta) + + # Append new solution. + if (problem.minmax[0] * new_solution.objectives_mean > problem.minmax[0] * best_solution.objectives_mean): + best_solution = new_solution + recommended_solns.append(new_solution) + intermediate_budgets.append(expended_budget) + + return recommended_solns, intermediate_budgets + + + def compute_search_direction(self, acidx, grad, problem, C): + ''' + Compute a search direction by solving a direction-finding quadratic subproblem at solution x. + + Arguments + --------- + acidx: list + list of indices of active constraints + grad : ndarray + the estimated objective gradient at new_solution + problem : Problem object + simulation-optimization problem to solve + C : ndarray + constraint matrix + + Returns + ------- + d : ndarray + search direction + lmbd : ndarray + Lagrange multipliers for this LP + ''' + # Define variables. + d = cp.Variable(problem.dim) + + # Define constraints. + constraints = [C[acidx, :] @ d == 0] + + # Define objective. + obj = cp.Minimize(grad @ d + 0.5 * cp.quad_form(d, np.identity(problem.dim))) + prob = cp.Problem(obj, constraints) + prob.solve() + # Get Lagrange multipliers + lmbd = prob.constraints[0].dual_value + + dir = np.array(d.value) + dir[np.abs(dir) < self.factors["tol"]] = 0 + + return dir, lmbd + + + def finite_diff(self, new_solution, BdsCheck, problem, r, stepsize = 1e-5): + ''' + Finite difference for approximating objective gradient at new_solution. + + Arguments + --------- + new_solution : Solution object + a solution to the problem + BdsCheck : ndarray + an array that checks for lower/upper bounds at each dimension + problem : Problem object + simulation-optimization problem to solve + r : int + number of replications taken at each solution + stepsize: float + step size for finite differences + + Returns + ------- + grad : ndarray + the estimated objective gradient at new_solution + ''' + lower_bound = problem.lower_bounds + upper_bound = problem.upper_bounds + fn = -1 * problem.minmax[0] * new_solution.objectives_mean + new_x = new_solution.x + # Store values for each dimension. + FnPlusMinus = np.zeros((problem.dim, 3)) + grad = np.zeros(problem.dim) + + for i in range(problem.dim): + # Initialization. + x1 = list(new_x) + x2 = list(new_x) + # Forward stepsize. + steph1 = stepsize + # Backward stepsize. + steph2 = stepsize + + # Check variable bounds. + if x1[i] + steph1 > upper_bound[i]: + steph1 = np.abs(upper_bound[i] - x1[i]) + if x2[i] - steph2 < lower_bound[i]: + steph2 = np.abs(x2[i] - lower_bound[i]) + + # Decide stepsize. + # Central diff. + if BdsCheck[i] == 0: + FnPlusMinus[i, 2] = min(steph1, steph2) + x1[i] = x1[i] + FnPlusMinus[i, 2] + x2[i] = x2[i] - FnPlusMinus[i, 2] + # Forward diff. + elif BdsCheck[i] == 1: + FnPlusMinus[i, 2] = steph1 + x1[i] = x1[i] + FnPlusMinus[i, 2] + # Backward diff. + else: + FnPlusMinus[i, 2] = steph2 + x2[i] = x2[i] - FnPlusMinus[i, 2] + x1_solution = self.create_new_solution(tuple(x1), problem) + if BdsCheck[i] != -1: + problem.simulate_up_to([x1_solution], r) + fn1 = -1 * problem.minmax[0] * x1_solution.objectives_mean + # First column is f(x+h,y). + FnPlusMinus[i, 0] = fn1 + x2_solution = self.create_new_solution(tuple(x2), problem) + if BdsCheck[i] != 1: + problem.simulate_up_to([x2_solution], r) + fn2 = -1 * problem.minmax[0] * x2_solution.objectives_mean + # Second column is f(x-h,y). + FnPlusMinus[i, 1] = fn2 + # Calculate gradient. + if BdsCheck[i] == 0: + grad[i] = (fn1 - fn2) / (2 * FnPlusMinus[i, 2]) + elif BdsCheck[i] == 1: + grad[i] = (fn1 - fn) / FnPlusMinus[i, 2] + elif BdsCheck[i] == -1: + grad[i] = (fn - fn2) / FnPlusMinus[i, 2] + + return grad + + def line_search(self, problem, expended_budget, r, grad, cur_sol, alpha_0, d, alpha, beta): + """ + A backtracking line-search along [x, x + rd] assuming all solution on the line are feasible. + + Arguments + --------- + problem : Problem object + simulation-optimization problem to solve + expended_budget: int + current expended budget + r : int + number of replications taken at each solution + grad : ndarray + objective gradient of cur_sol + cur_sol : Solution object + current solution + alpha_0 : float + maximum step size allowed + d : ndarray + search direction + alpha: float + tolerance for sufficient decrease condition + beta: float + step size reduction factor + + Returns + ------- + x_new_solution : Solution + a solution obtained by line search + step_size : float + computed step size + expended_budget : int + updated expended budget + """ + x = cur_sol.x + fx = -1 * problem.minmax[0] * cur_sol.objectives_mean + step_size = alpha_0 + count = 0 + x_new_solution = self.create_new_solution(tuple(x), problem) + while True: + if expended_budget > problem.factors["budget"]: + break + x_new = x + step_size * d + # Create a solution object for x_new. + x_new_solution = self.create_new_solution(tuple(x_new), problem) + # Use r simulated observations to estimate the objective value. + problem.simulate(x_new_solution, r) + expended_budget += r + # Check the sufficient decrease condition. + f_new = -1 * problem.minmax[0] * x_new_solution.objectives_mean + if f_new < fx + alpha * step_size * np.dot(grad, d): + break + step_size *= beta + count += 1 + return x_new_solution, step_size, expended_budget + + def find_feasible_initial(self, problem, Ae, Ai, be, bi, tol): + ''' + Find an initial feasible solution (if not user-provided) + by solving phase one simplex. + + Arguments + --------- + problem : Problem object + simulation-optimization problem to solve + C: ndarray + constraint coefficient matrix + d: ndarray + constraint coefficient vector + + Returns + ------- + x0 : ndarray + an initial feasible solution + tol: float + Floating point comparison tolerance + ''' + upper_bound = np.array(problem.upper_bounds) + lower_bound = np.array(problem.lower_bounds) + + # Define decision variables. + x = cp.Variable(problem.dim) + + # Define constraints. + constraints = [] + + if (Ae is not None) and (be is not None): + constraints.append(Ae @ x == be.ravel()) + if (Ai is not None) and (bi is not None): + constraints.append(Ai @ x <= bi.ravel()) + + # Removing redundant bound constraints. + ub_inf_idx = np.where(~np.isinf(upper_bound))[0] + if len(ub_inf_idx) > 0: + for i in ub_inf_idx: + constraints.append(x[i] <= upper_bound[i]) + lb_inf_idx = np.where(~np.isinf(lower_bound)) + if len(lb_inf_idx) > 0: + for i in lb_inf_idx: + constraints.append(x[i] >= lower_bound[i]) + + # Define objective function. + obj = cp.Minimize(0) + + # Create problem. + model = cp.Problem(obj, constraints) + + # Solve problem. + model.solve(solver = cp.SCIPY) + + # Check for optimality. + if model.status not in [cp.OPTIMAL, cp.OPTIMAL_INACCURATE] : + raise ValueError("Could not find feasible x0") + x0 = x.value + if not self._feasible(x0, problem, tol): + raise ValueError("Could not find feasible x0") + + return x0 + + def _feasible(self, x, problem, tol): + """ + Check whether a solution x is feasible to the problem. + + Arguments + --------- + x : tuple + a solution vector + problem : Problem object + simulation-optimization problem to solve + tol: float + Floating point comparison tolerance + """ + res = True + if (problem.Ci is not None) and (problem.di is not None): + res = res & np.all(problem.Ci @ x <= problem.di + tol) + if (problem.Ce is not None) and (problem.de is not None): + res = res & (np.allclose(np.dot(problem.Ce, x), problem.de, rtol=0, atol=tol)) + return res & (np.all(x >= problem.lower_bounds)) & (np.all(x <= problem.upper_bounds)) \ No newline at end of file diff --git a/simopt/solvers/pgd.py b/simopt/solvers/pgd.py new file mode 100644 index 000000000..66f3457ad --- /dev/null +++ b/simopt/solvers/pgd.py @@ -0,0 +1,535 @@ +""" +Summary +------- +PGD: A projected gradient descent algorithm for problems with linear constraints, i.e., Ce@x = de, Ci@x <= di. +A detailed description of the solver can be found `here `_. +""" +import numpy as np +import cvxpy as cp +import warnings +warnings.filterwarnings("ignore") + +from ..base import Solver + + +class PGD(Solver): + """ + The PGD solver. + + Attributes + ---------- + name : string + name of solver + objective_type : string + description of objective types: + "single" or "multi" + constraint_type : string + description of constraints types: + "unconstrained", "box", "deterministic", "stochastic" + variable_type : string + description of variable types: + "discrete", "continuous", "mixed" + gradient_needed : bool + indicates if gradient of objective function is needed + factors : dict + changeable factors (i.e., parameters) of the solver + specifications : dict + details of each factor (for GUI, data validation, and defaults) + rng_list : list of rng.MRG32k3a objects + list of RNGs used for the solver's internal purposes + + Arguments + --------- + name : str + user-specified name for solver + fixed_factors : dict + fixed_factors of the solver + + See also + -------- + base.Solver + """ + def __init__(self, name="PGD", fixed_factors={}): + self.name = name + self.objective_type = "single" + self.constraint_type = "deterministic" + self.variable_type = "continuous" + self.gradient_needed = False + self.specifications = { + "crn_across_solns": { + "description": "use CRN across solutions?", + "datatype": bool, + "default": True + }, + "r": { + "description": "number of replications taken at each solution", + "datatype": int, + "default": 30 + }, + "alpha": { + "description": "tolerance for sufficient decrease condition", + "datatype": float, + "default": 0.2 + }, + "beta": { + "description": "step size reduction factor in line search", + "datatype": float, + "default": 0.9 + }, + "alpha_max": { + "description": "maximum step size", + "datatype": float, + "default": 10.0 + }, + "lambda": { + "description": "magnifying factor for r inside the finite difference function", + "datatype": int, + "default": 2 + }, + "tol": { + "description": "floating point comparison tolerance", + "datatype": float, + "default": 1e-7 + }, + "finite_diff_step": { + "description": "step size for finite difference", + "datatype": float, + "default": 1e-5 + } + } + self.check_factor_list = { + "crn_across_solns": self.check_crn_across_solns, + "r": self.check_r, + "alpha": self.check_alpha, + "beta": self.check_beta, + "alpha_max": self.check_alpha_max, + "lambda": self.check_lambda, + "tol": self.check_tol, + "finite_diff_step": self.check_finite_diff_step + } + super().__init__(fixed_factors) + + def check_r(self): + return self.factors["r"] > 0 + + def check_alpha(self): + return self.factors["alpha"] > 0 + + def check_beta(self): + return self.factors["beta"] > 0 & self.factors["beta"] < 1 + + def check_alpha_max(self): + return self.factors["alpha_max"] > 0 + + def check_lambda(self): + return self.factors["lambda"] > 0 + + def check_tol(self): + return self.factors["tol"] > 0 + + def check_finite_diff_step(self): + return self.factors["finite_diff_step"] > 0 + + def solve(self, problem): + """ + Run a single macroreplication of a solver on a problem. + + Arguments + --------- + problem : Problem object + simulation-optimization problem to solve + crn_across_solns : bool + indicates if CRN are used when simulating different solutions + + Returns + ------- + recommended_solns : list of Solution objects + list of solutions recommended throughout the budget + intermediate_budgets : list of ints + list of intermediate budgets when recommended solutions changes + """ + recommended_solns = [] + intermediate_budgets = [] + expended_budget = 0 + + # Default values. + r = self.factors["r"] + alpha = self.factors["alpha"] + beta = self.factors["beta"] + tol = self.factors["tol"] + max_step = self.factors["alpha_max"] + + # Upper bound and lower bound. + lower_bound = np.array(problem.lower_bounds) + upper_bound = np.array(problem.upper_bounds) + + # Input inequality and equlaity constraint matrix and vector. + # Cix <= di + # Cex = de + Ci = problem.Ci + di = problem.di + Ce = problem.Ce + de = problem.de + + # Checker for whether the problem is unconstrained. + unconstr_flag = (Ce is None) & (Ci is None) & (di is None) & (de is None) & (all(np.isinf(lower_bound))) & (all(np.isinf(upper_bound))) + + # Start with the initial solution. + new_solution = self.create_new_solution(problem.factors["initial_solution"], problem) + new_x = new_solution.x + + # If the initial solution is not feasible, generate one using phase one simplex. + if (not unconstr_flag) & (not self._feasible(new_x, problem, tol)): + new_x = self.find_feasible_initial(problem, Ce, Ci, de, di, tol) + new_solution = self.create_new_solution(tuple(new_x), problem) + + # Use r simulated observations to estimate the objective value. + problem.simulate(new_solution, r) + expended_budget += r + best_solution = new_solution + recommended_solns.append(new_solution) + intermediate_budgets.append(expended_budget) + + while expended_budget < problem.factors["budget"]: + new_x = new_solution.x + # Check variable bounds. + forward = np.isclose(new_x, lower_bound, atol = tol).astype(int) + backward = np.isclose(new_x, upper_bound, atol = tol).astype(int) + # BdsCheck: 1 stands for forward, -1 stands for backward, 0 means central diff. + BdsCheck = np.subtract(forward, backward) + + if problem.gradient_available: + # Use IPA gradient if available. + grad = -1 * problem.minmax[0] * new_solution.objectives_gradients_mean[0] + else: + # Use finite difference to estimate gradient if IPA gradient is not available. + grad = self.finite_diff(new_solution, BdsCheck, problem, r, stepsize = self.factors["finite_diff_step"]) + expended_budget += (2 * problem.dim - np.sum(BdsCheck != 0)) * r + # A while loop to prevent zero gradient. + while np.all((grad == 0)): + if expended_budget > problem.factors["budget"]: + break + grad = self.finite_diff(new_solution, BdsCheck, problem, r) + expended_budget += (2 * problem.dim - np.sum(BdsCheck != 0)) * r + # Update r after each iteration. + r = int(self.factors["lambda"] * r) + + # Get search direction by taking negative normalized gradient. + dir = -grad / np.linalg.norm(grad) + + # Get a temp solution. + temp_x = new_x + max_step * dir + + # Check feasibility of temp_x. + if unconstr_flag or self._feasible(temp_x, problem, tol): + # Perform line search. + new_solution, step_size, expended_budget = self.line_search(problem, expended_budget, r, grad, new_solution, max_step, dir, alpha, beta) + # Update maximum step size for the next iteration. + max_step = step_size + else: + # If not feasible, project temp_x back to the feasible set. + proj_x = self.project_grad(problem, temp_x, Ce, Ci, de, di) + # Get new search direction based on projection. + dir = proj_x - new_x + # Perform line search. + new_solution, step_size, expended_budget = self.line_search(problem, expended_budget, r, grad, new_solution, 1, dir, alpha, beta) + # Update maximum step size for the next iteration. + max_step = step_size + + # Append new solution. + if (problem.minmax[0] * new_solution.objectives_mean > problem.minmax[0] * best_solution.objectives_mean): + best_solution = new_solution + recommended_solns.append(new_solution) + intermediate_budgets.append(expended_budget) + + return recommended_solns, intermediate_budgets + + + def finite_diff(self, new_solution, BdsCheck, problem, r, stepsize = 1e-5): + ''' + Finite difference for approximating objective gradient at new_solution. + + Arguments + --------- + new_solution : Solution object + a solution to the problem + BdsCheck : ndarray + an array that checks for lower/upper bounds at each dimension + problem : Problem object + simulation-optimization problem to solve + r : int + number of replications taken at each solution + stepsize: float + step size for finite differences + + Returns + ------- + grad : ndarray + the estimated objective gradient at new_solution + ''' + lower_bound = problem.lower_bounds + upper_bound = problem.upper_bounds + fn = -1 * problem.minmax[0] * new_solution.objectives_mean + new_x = new_solution.x + # Store values for each dimension. + FnPlusMinus = np.zeros((problem.dim, 3)) + grad = np.zeros(problem.dim) + + for i in range(problem.dim): + # Initialization. + x1 = list(new_x) + x2 = list(new_x) + # Forward stepsize. + steph1 = stepsize + # Backward stepsize. + steph2 = stepsize + + # Check variable bounds. + if x1[i] + steph1 > upper_bound[i]: + steph1 = np.abs(upper_bound[i] - x1[i]) + if x2[i] - steph2 < lower_bound[i]: + steph2 = np.abs(x2[i] - lower_bound[i]) + + # Decide stepsize. + # Central diff. + if BdsCheck[i] == 0: + FnPlusMinus[i, 2] = min(steph1, steph2) + x1[i] = x1[i] + FnPlusMinus[i, 2] + x2[i] = x2[i] - FnPlusMinus[i, 2] + # Forward diff. + elif BdsCheck[i] == 1: + FnPlusMinus[i, 2] = steph1 + x1[i] = x1[i] + FnPlusMinus[i, 2] + # Backward diff. + else: + FnPlusMinus[i, 2] = steph2 + x2[i] = x2[i] - FnPlusMinus[i, 2] + x1_solution = self.create_new_solution(tuple(x1), problem) + if BdsCheck[i] != -1: + problem.simulate_up_to([x1_solution], r) + fn1 = -1 * problem.minmax[0] * x1_solution.objectives_mean + # First column is f(x+h,y). + FnPlusMinus[i, 0] = fn1 + x2_solution = self.create_new_solution(tuple(x2), problem) + if BdsCheck[i] != 1: + problem.simulate_up_to([x2_solution], r) + fn2 = -1 * problem.minmax[0] * x2_solution.objectives_mean + # Second column is f(x-h,y). + FnPlusMinus[i, 1] = fn2 + # Calculate gradient. + if BdsCheck[i] == 0: + grad[i] = (fn1 - fn2) / (2 * FnPlusMinus[i, 2]) + elif BdsCheck[i] == 1: + grad[i] = (fn1 - fn) / FnPlusMinus[i, 2] + elif BdsCheck[i] == -1: + grad[i] = (fn - fn2) / FnPlusMinus[i, 2] + + return grad + + def _feasible(self, x, problem, tol): + """ + Check whether a solution x is feasible to the problem. + + Arguments + --------- + x : tuple + a solution vector + problem : Problem object + simulation-optimization problem to solve + tol: float + Floating point comparison tolerance + """ + res = True + if (problem.Ci is not None) and (problem.di is not None): + res = res & np.all(problem.Ci @ x <= problem.di + tol) + if (problem.Ce is not None) and (problem.de is not None): + res = res & (np.allclose(np.dot(problem.Ce, x), problem.de, rtol=0, atol=tol)) + return res & (np.all(x >= problem.lower_bounds)) & (np.all(x <= problem.upper_bounds)) + + def project_grad(self, problem, x, Ae, Ai, be, bi): + """ + Project the vector x onto the hyperplane H: Ae x = be, Ai x <= bi by solving a quadratic projection problem: + + min d^Td + s.t. Ae(x + d) = be + Ai(x + d) <= bi + (x + d) >= lb + (x + d) <= ub + + Arguments + --------- + problem : Problem object + simulation-optimization problem to solve + x : ndarray + vector to be projected + Ae: ndarray + equality constraint coefficient matrix + be: ndarray + equality constraint coefficient vector + Ai: ndarray + inequality constraint coefficient matrix + bi: ndarray + inequality constraint coefficient vector + Returns + ------- + x_new : ndarray + the projected vector + """ + # Define variables. + d = cp.Variable(problem.dim) + + # Define objective. + obj = cp.Minimize(cp.quad_form(d, np.identity(problem.dim))) + + # Define constraints. + constraints = [] + if (Ae is not None) and (be is not None): + constraints.append(Ae @ (x + d) == be.ravel()) + if (Ai is not None) and (bi is not None): + constraints.append(Ai @ (x + d) <= bi.ravel()) + + upper_bound = np.array(problem.upper_bounds) + lower_bound = np.array(problem.lower_bounds) + + # Removing redundant bound constraints. + ub_inf_idx = np.where(~np.isinf(upper_bound))[0] + if len(ub_inf_idx) > 0: + for i in ub_inf_idx: + constraints.append((x + d)[i] <= upper_bound[i]) + lb_inf_idx = np.where(~np.isinf(lower_bound))[0] + if len(lb_inf_idx) > 0: + for i in lb_inf_idx: + constraints.append((x + d)[i] >= lower_bound[i]) + + # Form and solve problem. + prob = cp.Problem(obj, constraints) + prob.solve() + + dir = d.value + + # Get the projected vector. + x_new = x + dir + + # Avoid floating point error + x_new[np.abs(x_new) < self.factors["tol"]] = 0 + + return x_new + + def line_search(self, problem, expended_budget, r, grad, cur_sol, alpha_0, d, alpha, beta): + """ + A backtracking line-search along [x, x + rd] assuming all solution on the line are feasible. + + Arguments + --------- + problem : Problem object + simulation-optimization problem to solve + expended_budget: int + current expended budget + r : int + number of replications taken at each solution + grad : ndarray + objective gradient of cur_sol + cur_sol : Solution object + current solution + alpha_0 : float + maximum step size allowed + d : ndarray + search direction + alpha: float + tolerance for sufficient decrease condition + beta: float + step size reduction factor + + Returns + ------- + x_new_solution : Solution + a solution obtained by line search + step_size : float + computed step size + expended_budget : int + updated expended budget + """ + x = cur_sol.x + fx = -1 * problem.minmax[0] * cur_sol.objectives_mean + step_size = alpha_0 + count = 0 + x_new_solution = cur_sol + while True: + if expended_budget > problem.factors["budget"]: + break + x_new = x + step_size * d + # Create a solution object for x_new. + x_new_solution = self.create_new_solution(tuple(x_new), problem) + # Use r simulated observations to estimate the objective value. + problem.simulate(x_new_solution, r) + expended_budget += r + # Check the sufficient decrease condition. + f_new = -1 * problem.minmax[0] * x_new_solution.objectives_mean + if f_new < fx + alpha * step_size * np.dot(grad, d): + break + step_size *= beta + count += 1 + return x_new_solution, step_size, expended_budget, + + def find_feasible_initial(self, problem, Ae, Ai, be, bi, tol): + ''' + Find an initial feasible solution (if not user-provided) + by solving phase one simplex. + + Arguments + --------- + problem : Problem object + simulation-optimization problem to solve + C: ndarray + constraint coefficient matrix + d: ndarray + constraint coefficient vector + + Returns + ------- + x0 : ndarray + an initial feasible solution + tol: float + Floating point comparison tolerance + ''' + upper_bound = np.array(problem.upper_bounds) + lower_bound = np.array(problem.lower_bounds) + + # Define decision variables. + x = cp.Variable(problem.dim) + + # Define constraints. + constraints = [] + + if (Ae is not None) and (be is not None): + constraints.append(Ae @ x == be.ravel()) + if (Ai is not None) and (bi is not None): + constraints.append(Ai @ x <= bi.ravel()) + + # Removing redundant bound constraints. + ub_inf_idx = np.where(~np.isinf(upper_bound))[0] + if len(ub_inf_idx) > 0: + for i in ub_inf_idx: + constraints.append(x[i] <= upper_bound[i]) + lb_inf_idx = np.where(~np.isinf(lower_bound))[0] + if len(lb_inf_idx) > 0: + for i in lb_inf_idx: + constraints.append(x[i] >= lower_bound[i]) + + # Define objective function. + obj = cp.Minimize(0) + + # Create problem. + model = cp.Problem(obj, constraints) + + # Solve problem. + model.solve(solver = cp.SCIPY) + + # Check for optimality. + if model.status not in [cp.OPTIMAL, cp.OPTIMAL_INACCURATE] : + raise ValueError("Could not find feasible x0") + x0 = x.value + if not self._feasible(x0, problem, tol): + raise ValueError("Could not find feasible x0") + + return x0 diff --git a/simopt/solvers/pgdss.py b/simopt/solvers/pgdss.py new file mode 100644 index 000000000..db9dc53f0 --- /dev/null +++ b/simopt/solvers/pgdss.py @@ -0,0 +1,509 @@ +""" +Summary +------- +PGD-SS: A projected gradient descent algorithm with adaptive step search +for problems with linear constraints, i.e., Ce@x = de, Ci@x <= di. +A detailed description of the solver can be found `here `_. +""" +import numpy as np +import cvxpy as cp +import warnings +warnings.filterwarnings("ignore") + +from ..base import Solver + + +class PGDSS(Solver): + """ + The PGD solver with adaptive step search. + + Attributes + ---------- + name : string + name of solver + objective_type : string + description of objective types: + "single" or "multi" + constraint_type : string + description of constraints types: + "unconstrained", "box", "deterministic", "stochastic" + variable_type : string + description of variable types: + "discrete", "continuous", "mixed" + gradient_needed : bool + indicates if gradient of objective function is needed + factors : dict + changeable factors (i.e., parameters) of the solver + specifications : dict + details of each factor (for GUI, data validation, and defaults) + rng_list : list of rng.MRG32k3a objects + list of RNGs used for the solver's internal purposes + + Arguments + --------- + name : str + user-specified name for solver + fixed_factors : dict + fixed_factors of the solver + + See also + -------- + base.Solver + """ + def __init__(self, name="PGD-SS", fixed_factors={}): + self.name = name + self.objective_type = "single" + self.constraint_type = "deterministic" + self.variable_type = "continuous" + self.gradient_needed = False + self.specifications = { + "crn_across_solns": { + "description": "use CRN across solutions?", + "datatype": bool, + "default": True + }, + "r": { + "description": "number of replications taken at each solution", + "datatype": int, + "default": 30 + }, + "theta": { + "description": "constant in the Armijo condition", + "datatype": int, + "default": 0.2 + }, + "gamma": { + "description": "constant for shrinking the step size", + "datatype": int, + "default": 0.8 + }, + "alpha_max": { + "description": "maximum step size", + "datatype": int, + "default": 10 + }, + "alpha_0": { + "description": "initial step size", + "datatype": int, + "default": 1 + }, + "epsilon_f": { + "description": "additive constant in the Armijo condition", + "datatype": int, + "default": 1e-3 # In the paper, this value is estimated for every epoch but a value > 0 is justified in practice. + }, + "lambda": { + "description": "magnifying factor for r inside the finite difference function", + "datatype": int, + "default": 2 + }, + "tol": { + "description": "floating point comparison tolerance", + "datatype": float, + "default": 1e-7 + }, + "finite_diff_step": { + "description": "step size for finite difference", + "datatype": float, + "default": 1e-5 + } + + } + self.check_factor_list = { + "crn_across_solns": self.check_crn_across_solns, + "r": self.check_r, + "theta": self.check_theta, + "gamma": self.check_gamma, + "alpha_max": self.check_alpha_max, + "alpha_0": self.check_alpha_0, + "epsilon_f": self.check_epsilon_f, + "lambda": self.check_lambda, + "tol": self.check_tol, + "finite_diff_step": self.check_finite_diff_step + } + super().__init__(fixed_factors) + + def check_r(self): + return self.factors["r"] > 0 + + def check_theta(self): + return self.factors["theta"] > 0 & self.factors["theta"] < 1 + + def check_gamma(self): + return self.factors["gamma"] > 0 & self.factors["gamma"] < 1 + + def check_alpha_max(self): + return self.factors["alpha_max"] > 0 + + def check_alpha_0(self): + return self.factors["alpha_0"] > 0 + + def check_epsilon_f(self): + return self.factors["epsilon_f"] > 0 + + def check_tol(self): + return self.factors["tol"] > 0 + + def check_lambda(self): + return self.factors["lambda"] > 0 + + def check_finite_diff_step(self): + return self.factors["finite_diff_step"] > 0 + + def solve(self, problem): + """ + Run a single macroreplication of a solver on a problem. + + Arguments + --------- + problem : Problem object + simulation-optimization problem to solve + crn_across_solns : bool + indicates if CRN are used when simulating different solutions + + Returns + ------- + recommended_solns : list of Solution objects + list of solutions recommended throughout the budget + intermediate_budgets : list of ints + list of intermediate budgets when recommended solutions changes + """ + recommended_solns = [] + intermediate_budgets = [] + expended_budget = 0 + + # Default values. + r = self.factors["r"] + tol = self.factors["tol"] + theta = self.factors["theta"] + gamma = self.factors["gamma"] + alpha_max = self.factors["alpha_max"] + alpha_0 = self.factors["alpha_0"] + epsilon_f = self.factors["epsilon_f"] + + # Upper bound and lower bound. + lower_bound = np.array(problem.lower_bounds) + upper_bound = np.array(problem.upper_bounds) + + # Initialize stepsize. + alpha = alpha_0 + + # Input inequality and equlaity constraint matrix and vector. + # Cix <= di + # Cex = de + Ci = problem.Ci + di = problem.di + Ce = problem.Ce + de = problem.de + + # Checker for whether the problem is unconstrained. + unconstr_flag = (Ce is None) & (Ci is None) & (di is None) & (de is None) & (all(np.isinf(lower_bound))) & (all(np.isinf(upper_bound))) + + # Start with the initial solution. + new_solution = self.create_new_solution(problem.factors["initial_solution"], problem) + new_x = new_solution.x + + # If the initial solution is not feasible, generate one using phase one simplex. + if (not unconstr_flag) & (not self._feasible(new_x, problem, tol)): + new_x = self.find_feasible_initial(problem, Ce, Ci, de, di, tol) + new_solution = self.create_new_solution(tuple(new_x), problem) + + # Use r simulated observations to estimate the objective value. + problem.simulate(new_solution, r) + expended_budget += r + best_solution = new_solution + recommended_solns.append(new_solution) + intermediate_budgets.append(expended_budget) + + while expended_budget < problem.factors["budget"]: + new_x = new_solution.x + # Check variable bounds. + forward = np.isclose(new_x, lower_bound, atol = tol).astype(int) + backward = np.isclose(new_x, upper_bound, atol = tol).astype(int) + # BdsCheck: 1 stands for forward, -1 stands for backward, 0 means central diff. + BdsCheck = np.subtract(forward, backward) + + if problem.gradient_available: + # Use IPA gradient if available. + grad = -1 * problem.minmax[0] * new_solution.objectives_gradients_mean[0] + else: + # Use finite difference to estimate gradient if IPA gradient is not available. + grad = self.finite_diff(new_solution, BdsCheck, problem, r, stepsize = self.factors["finite_diff_step"]) + expended_budget += (2 * problem.dim - np.sum(BdsCheck != 0)) * r + # A while loop to prevent zero gradient. + while np.all((grad == 0)): + if expended_budget > problem.factors["budget"]: + break + grad = self.finite_diff(new_solution, BdsCheck, problem, r) + expended_budget += (2 * problem.dim - np.sum(BdsCheck != 0)) * r + # Update r after each iteration. + r = int(self.factors["lambda"] * r) + + # Get search direction by taking negative normalized gradient. + dir = -grad / np.linalg.norm(grad) + + # Get a temp solution. + temp_x = new_x + alpha * dir + + if unconstr_flag or self._feasible(temp_x, problem, tol): + candidate_solution = self.create_new_solution(tuple(temp_x), problem) + else: + # If not feasible, project temp_x back to the feasible set. + proj_x = self.project_grad(problem, temp_x, Ce, Ci, de, di) + candidate_solution = self.create_new_solution(tuple(proj_x), problem) + # Get new search direction based on projection. + dir = proj_x - new_x + + # Use r simulated observations to estimate the objective value. + problem.simulate(candidate_solution, r) + expended_budget += r + + # Check the modified Armijo condition for sufficient decrease. + if (-1 * problem.minmax[0] * candidate_solution.objectives_mean) <= ( + -1 * problem.minmax[0] * new_solution.objectives_mean + alpha * theta * np.dot(grad, dir) + 2 * epsilon_f): + # Successful step + new_solution = candidate_solution + # Enlarge step size. + alpha = min(alpha_max, alpha / gamma) + else: + # Unsuccessful step - reduce step size. + alpha = gamma * alpha + + # Append new solution. + if (problem.minmax[0] * new_solution.objectives_mean > problem.minmax[0] * best_solution.objectives_mean): + best_solution = new_solution + recommended_solns.append(new_solution) + intermediate_budgets.append(expended_budget) + + return recommended_solns, intermediate_budgets + + + def finite_diff(self, new_solution, BdsCheck, problem, r, stepsize = 1e-5): + ''' + Finite difference for approximating objective gradient at new_solution. + + Arguments + --------- + new_solution : Solution object + a solution to the problem + BdsCheck : ndarray + an array that checks for lower/upper bounds at each dimension + problem : Problem object + simulation-optimization problem to solve + r : int + number of replications taken at each solution + stepsize: float + step size for finite differences + + Returns + ------- + grad : ndarray + the estimated objective gradient at new_solution + ''' + lower_bound = problem.lower_bounds + upper_bound = problem.upper_bounds + fn = -1 * problem.minmax[0] * new_solution.objectives_mean + new_x = new_solution.x + # Store values for each dimension. + FnPlusMinus = np.zeros((problem.dim, 3)) + grad = np.zeros(problem.dim) + + for i in range(problem.dim): + # Initialization. + x1 = list(new_x) + x2 = list(new_x) + # Forward stepsize. + steph1 = stepsize + # Backward stepsize. + steph2 = stepsize + + # Check variable bounds. + if x1[i] + steph1 > upper_bound[i]: + steph1 = np.abs(upper_bound[i] - x1[i]) + if x2[i] - steph2 < lower_bound[i]: + steph2 = np.abs(x2[i] - lower_bound[i]) + + # Decide stepsize. + # Central diff. + if BdsCheck[i] == 0: + FnPlusMinus[i, 2] = min(steph1, steph2) + x1[i] = x1[i] + FnPlusMinus[i, 2] + x2[i] = x2[i] - FnPlusMinus[i, 2] + # Forward diff. + elif BdsCheck[i] == 1: + FnPlusMinus[i, 2] = steph1 + x1[i] = x1[i] + FnPlusMinus[i, 2] + # Backward diff. + else: + FnPlusMinus[i, 2] = steph2 + x2[i] = x2[i] - FnPlusMinus[i, 2] + x1_solution = self.create_new_solution(tuple(x1), problem) + if BdsCheck[i] != -1: + problem.simulate_up_to([x1_solution], r) + fn1 = -1 * problem.minmax[0] * x1_solution.objectives_mean + # First column is f(x+h,y). + FnPlusMinus[i, 0] = fn1 + x2_solution = self.create_new_solution(tuple(x2), problem) + if BdsCheck[i] != 1: + problem.simulate_up_to([x2_solution], r) + fn2 = -1 * problem.minmax[0] * x2_solution.objectives_mean + # Second column is f(x-h,y). + FnPlusMinus[i, 1] = fn2 + # Calculate gradient. + if BdsCheck[i] == 0: + grad[i] = (fn1 - fn2) / (2 * FnPlusMinus[i, 2]) + elif BdsCheck[i] == 1: + grad[i] = (fn1 - fn) / FnPlusMinus[i, 2] + elif BdsCheck[i] == -1: + grad[i] = (fn - fn2) / FnPlusMinus[i, 2] + + return grad + + def _feasible(self, x, problem, tol): + """ + Check whether a solution x is feasible to the problem. + + Arguments + --------- + x : tuple + a solution vector + problem : Problem object + simulation-optimization problem to solve + tol: float + Floating point comparison tolerance + """ + res = True + if (problem.Ci is not None) and (problem.di is not None): + res = res & np.all(problem.Ci @ x <= problem.di + tol) + if (problem.Ce is not None) and (problem.de is not None): + res = res & (np.allclose(np.dot(problem.Ce, x), problem.de, rtol=0, atol=tol)) + return res & (np.all(x >= problem.lower_bounds)) & (np.all(x <= problem.upper_bounds)) + + def project_grad(self, problem, x, Ae, Ai, be, bi): + """ + Project the vector x onto the hyperplane H: Ae x = be, Ai x <= bi by solving a quadratic projection problem: + + min d^Td + s.t. Ae(x + d) = be + Ai(x + d) <= bi + (x + d) >= lb + (x + d) <= ub + + Arguments + --------- + problem : Problem object + simulation-optimization problem to solve + x : ndarray + vector to be projected + Ae: ndarray + equality constraint coefficient matrix + be: ndarray + equality constraint coefficient vector + Ai: ndarray + inequality constraint coefficient matrix + bi: ndarray + inequality constraint coefficient vector + Returns + ------- + x_new : ndarray + the projected vector + """ + # Define variables. + d = cp.Variable(problem.dim) + + # Define objective. + obj = cp.Minimize(cp.quad_form(d, np.identity(problem.dim))) + + # Define constraints. + constraints = [] + if (Ae is not None) and (be is not None): + constraints.append(Ae @ (x + d) == be.ravel()) + if (Ai is not None) and (bi is not None): + constraints.append(Ai @ (x + d) <= bi.ravel()) + + upper_bound = np.array(problem.upper_bounds) + lower_bound = np.array(problem.lower_bounds) + # Removing redundant bound constraints. + ub_inf_idx = np.where(~np.isinf(upper_bound))[0] + if len(ub_inf_idx) > 0: + for i in ub_inf_idx: + constraints.append((x + d)[i] <= upper_bound[i]) + lb_inf_idx = np.where(~np.isinf(lower_bound))[0] + if len(lb_inf_idx) > 0: + for i in lb_inf_idx: + constraints.append((x + d)[i] >= lower_bound[i]) + + # Form and solve problem. + prob = cp.Problem(obj, constraints) + prob.solve() + + # Get the projected vector. + x_new = x + d.value + + # Avoid floating point error + x_new[np.abs(x_new) < self.factors["tol"]] = 0 + + return x_new + + def find_feasible_initial(self, problem, Ae, Ai, be, bi, tol): + ''' + Find an initial feasible solution (if not user-provided) + by solving phase one simplex. + + Arguments + --------- + problem : Problem object + simulation-optimization problem to solve + C: ndarray + constraint coefficient matrix + d: ndarray + constraint coefficient vector + + Returns + ------- + x0 : ndarray + an initial feasible solution + tol: float + Floating point comparison tolerance + ''' + upper_bound = np.array(problem.upper_bounds) + lower_bound = np.array(problem.lower_bounds) + + # Define decision variables. + x = cp.Variable(problem.dim) + + # Define constraints. + constraints = [] + + if (Ae is not None) and (be is not None): + constraints.append(Ae @ x == be.ravel()) + if (Ai is not None) and (bi is not None): + constraints.append(Ai @ x <= bi.ravel()) + + # Removing redundant bound constraints. + ub_inf_idx = np.where(~np.isinf(upper_bound))[0] + if len(ub_inf_idx) > 0: + for i in ub_inf_idx: + constraints.append(x[i] <= upper_bound[i]) + lb_inf_idx = np.where(~np.isinf(lower_bound))[0] + if len(lb_inf_idx) > 0: + for i in lb_inf_idx: + constraints.append(x[i] >= lower_bound[i]) + + # Define objective function. + obj = cp.Minimize(0) + + # Create problem. + model = cp.Problem(obj, constraints) + + # Solve problem. + model.solve(solver = cp.SCIPY) + + # Check for optimality. + if model.status not in [cp.OPTIMAL, cp.OPTIMAL_INACCURATE] : + raise ValueError("Could not find feasible x0") + x0 = x.value + if not self._feasible(x0, problem, tol): + raise ValueError("Could not find feasible x0") + + return x0 From 2db099384e5a31cb4647ccc86e5d877f70ead7a8 Mon Sep 17 00:00:00 2001 From: Joe Ye Date: Wed, 12 Apr 2023 13:54:48 -0400 Subject: [PATCH 2/5] fixed bugs --- simopt/models/san.py | 4 ++-- simopt/solvers/active_set.py | 5 ++++- simopt/solvers/pgd.py | 7 +++++-- simopt/solvers/pgdss.py | 5 ++++- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/simopt/models/san.py b/simopt/models/san.py index 966255e01..d83e08ede 100644 --- a/simopt/models/san.py +++ b/simopt/models/san.py @@ -568,7 +568,7 @@ def __init__(self, name="SAN-2", fixed_factors=None, model_fixed_factors=None): "budget": { "description": "max # of replications for a solver to take", "datatype": int, - "default": 2000 + "default": 10000 }, "arc_costs": { "description": "Cost associated to each arc.", @@ -594,7 +594,7 @@ def __init__(self, name="SAN-2", fixed_factors=None, model_fixed_factors=None): self.upper_bounds = (np.inf,) * self.dim self.Ci = -1 * np.ones(13) self.Ce = None - self.di = np.array(-[self.factors["sum_lb"]]) + self.di = -1 * np.array([self.factors["sum_lb"]]) self.de = None def check_arc_costs(self): diff --git a/simopt/solvers/active_set.py b/simopt/solvers/active_set.py index dc620956c..c3ec54e77 100644 --- a/simopt/solvers/active_set.py +++ b/simopt/solvers/active_set.py @@ -585,9 +585,12 @@ def _feasible(self, x, problem, tol): tol: float Floating point comparison tolerance """ + x = np.asarray(x) + lb = np.asarray(problem.lower_bounds) + ub = np.asarray(problem.upper_bounds) res = True if (problem.Ci is not None) and (problem.di is not None): res = res & np.all(problem.Ci @ x <= problem.di + tol) if (problem.Ce is not None) and (problem.de is not None): res = res & (np.allclose(np.dot(problem.Ce, x), problem.de, rtol=0, atol=tol)) - return res & (np.all(x >= problem.lower_bounds)) & (np.all(x <= problem.upper_bounds)) \ No newline at end of file + return res & (np.all(x >= lb)) & (np.all(x <= ub)) \ No newline at end of file diff --git a/simopt/solvers/pgd.py b/simopt/solvers/pgd.py index 66f3457ad..2725ec122 100644 --- a/simopt/solvers/pgd.py +++ b/simopt/solvers/pgd.py @@ -338,13 +338,16 @@ def _feasible(self, x, problem, tol): simulation-optimization problem to solve tol: float Floating point comparison tolerance - """ + """ + x = np.asarray(x) + lb = np.asarray(problem.lower_bounds) + ub = np.asarray(problem.upper_bounds) res = True if (problem.Ci is not None) and (problem.di is not None): res = res & np.all(problem.Ci @ x <= problem.di + tol) if (problem.Ce is not None) and (problem.de is not None): res = res & (np.allclose(np.dot(problem.Ce, x), problem.de, rtol=0, atol=tol)) - return res & (np.all(x >= problem.lower_bounds)) & (np.all(x <= problem.upper_bounds)) + return res & (np.all(x >= lb)) & (np.all(x <= ub)) def project_grad(self, problem, x, Ae, Ai, be, bi): """ diff --git a/simopt/solvers/pgdss.py b/simopt/solvers/pgdss.py index db9dc53f0..6d73fa34a 100644 --- a/simopt/solvers/pgdss.py +++ b/simopt/solvers/pgdss.py @@ -372,12 +372,15 @@ def _feasible(self, x, problem, tol): tol: float Floating point comparison tolerance """ + x = np.asarray(x) + lb = np.asarray(problem.lower_bounds) + ub = np.asarray(problem.upper_bounds) res = True if (problem.Ci is not None) and (problem.di is not None): res = res & np.all(problem.Ci @ x <= problem.di + tol) if (problem.Ce is not None) and (problem.de is not None): res = res & (np.allclose(np.dot(problem.Ce, x), problem.de, rtol=0, atol=tol)) - return res & (np.all(x >= problem.lower_bounds)) & (np.all(x <= problem.upper_bounds)) + return res & (np.all(x >= lb)) & (np.all(x <= ub)) def project_grad(self, problem, x, Ae, Ai, be, bi): """ From 5ca7cb8d145c868361fa3d674883efa92b84a294 Mon Sep 17 00:00:00 2001 From: Joe Ye Date: Thu, 13 Apr 2023 17:29:45 -0400 Subject: [PATCH 3/5] Update active_set.py --- simopt/solvers/active_set.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simopt/solvers/active_set.py b/simopt/solvers/active_set.py index c3ec54e77..48488ebad 100644 --- a/simopt/solvers/active_set.py +++ b/simopt/solvers/active_set.py @@ -197,7 +197,7 @@ def solve(self, problem): C = Ci d = di.T else: - C = np.empty([problem.dim, 1]) + C = np.empty([1, problem.dim]) d = np.empty([1, 1]) if len(ub_inf_idx) > 0: From bcc4f9965b0dfa8eb78bdc41076219d6160015ed Mon Sep 17 00:00:00 2001 From: Joe Ye Date: Tue, 18 Apr 2023 15:35:24 -0400 Subject: [PATCH 4/5] add rst figures --- docs/SMF_example.png | Bin 0 -> 55692 bytes docs/covid_test_compartments.png | Bin 0 -> 187664 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/SMF_example.png create mode 100644 docs/covid_test_compartments.png diff --git a/docs/SMF_example.png b/docs/SMF_example.png new file mode 100644 index 0000000000000000000000000000000000000000..c983c8561a8c7bc3b8d9b4f336be6c3f9a0528ab GIT binary patch literal 55692 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

2Rz2xz2SB)X+s}($JrbVmAy-(GeX@kA+Zm7Fqg+ z7jsO~ls;>q=x5v4Dz%FigzvUp8B9c1rs9N_2?NE3APvLv=AI)Q#)Dnd!h|iWc$uPN z0TS{Xp-z+vY8=(uU7m<=TnP%Oy;)q?+K|}BGyL^XWk_=EzpVE;VL!FRP6tGTLgqW$ij0s8`3it7wv(+z)h9tSaX#FzeK~g zP_QG!D6xaAJvieiG|Ll!?goDdWyPb@ixrggSu&=N`(@c2;wyasgK=ffrYg2}p~VrT zz#`CH^#WByB0S=D={@_m6X&b9f#KF?KbptXZ?s~2c`FTl<=<*CQrtAG@XyQRnLvsJ zrosn28VpFVsWpxji#}KNEs~p^DzWu{sn^*3UbQ#X1iL{sho0qqWFe#K&j2nf$lkzc za^~h-R9EENErUN;xlP3_^^ocfUA7-H2V7EK`ZED?Z~jrO9ie$fluNUzdw=&sA{T*+ z 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
EU$CP@RmVLSGMsUD57 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 z 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 VV_CJ!(^&&Nf-qs|4*w$s{{m43Hsb&Q literal 0 HcmV?d00001 From 984287eacc4039041bdc435dd6322fa88c67d282 Mon Sep 17 00:00:00 2001 From: Joe Ye Date: Tue, 18 Apr 2023 15:41:50 -0400 Subject: [PATCH 5/5] add rst figures --- docs/SMF_example 2.png | Bin 0 -> 55692 bytes docs/covid_test_compartments 2.png | Bin 0 -> 187664 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/SMF_example 2.png create mode 100644 docs/covid_test_compartments 2.png diff --git a/docs/SMF_example 2.png b/docs/SMF_example 2.png new file mode 100644 index 0000000000000000000000000000000000000000..c983c8561a8c7bc3b8d9b4f336be6c3f9a0528ab GIT binary patch literal 55692 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

2Rz2xz2SB)X+s}($JrbVmAy-(GeX@kA+Zm7Fqg+ z7jsO~ls;>q=x5v4Dz%FigzvUp8B9c1rs9N_2?NE3APvLv=AI)Q#)Dnd!h|iWc$uPN z0TS{Xp-z+vY8=(uU7m<=TnP%Oy;)q?+K|}BGyL^XWk_=EzpVE;VL!FRP6tGTLgqW$ij0s8`3it7wv(+z)h9tSaX#FzeK~g zP_QG!D6xaAJvieiG|Ll!?goDdWyPb@ixrggSu&=N`(@c2;wyasgK=ffrYg2}p~VrT zz#`CH^#WByB0S=D={@_m6X&b9f#KF?KbptXZ?s~2c`FTl<=<*CQrtAG@XyQRnLvsJ zrosn28VpFVsWpxji#}KNEs~p^DzWu{sn^*3UbQ#X1iL{sho0qqWFe#K&j2nf$lkzc za^~h-R9EENErUN;xlP3_^^ocfUA7-H2V7EK`ZED?Z~jrO9ie$fluNUzdw=&sA{T*+ z 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
EU$CP@RmVLSGMsUD57 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 z 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 VV_CJ!(^&&Nf-qs|4*w$s{{m43Hsb&Q literal 0 HcmV?d00001