gadget_model¶
The decision cactus model consists of multiple gadgets.
-
class
vnep_approx.gadget_model.AbstractGadget(name, request, in_node, out_nodes)¶ An abstract gadget used by
GadgetContainerRequest.Gadgets are connected by sharing a common node. Nodes that are designated to be used by multiple gadgets are called interface nodes.
A gadget has exactly one in-node and one or multiple out-nodes.
-
adapt_model_objective_according_to_local_profits(obj_expr)¶
-
extend_load_constraints(constraint_dict, nodes_handled_by_other_gadgets)¶
-
extend_mapping_by_own_solution(mapping, load, nodes_handled_by_other_gadgets)¶
-
generate_constraints(model)¶
-
generate_flow_induction_at_root_constraint(model)¶
-
generate_variables(model)¶
-
in_node= None¶ in-node of the gadget
-
interface_nodes= None¶ all interface nodes (in- and out-nodes)
-
name= None¶ gadget name
-
out_nodes= None¶ out-nodes of the gadget
-
reduce_flow_on_last_returned_mapping(used_flow)¶
-
request= None¶ the request graph of the gadget
-
set_substrate(substrate)¶
-
substrate= None¶ the substrate
-
verify_mapping(mapping)¶ Perform certain sanity checks usually performed by the
alib.solutions.Mappingclass.Parameters: mapping (solutions.Mapping) – the request mapping Returns: a list of out-nodes that are mapped
-
-
class
vnep_approx.gadget_model.CactusGadget(name, request, in_node, out_nodes, parent_name=None)¶ -
adapt_model_objective_according_to_local_profits(obj_expr)¶
-
extend_load_constraints(constraint_dict, nodes_handled_by_other_gadgets)¶
-
extend_mapping_by_own_solution(mapping, load, nodes_handled_by_other_gadgets)¶
-
generate_constraints(model)¶
-
generate_flow_induction_at_root_constraint(model)¶
-
generate_variables(model)¶
-
reduce_flow_on_last_returned_mapping(used_flow)¶
-
verify_mapping(mapping)¶ For a cactus gadget, each node and each edge must be mapped.
Parameters: mapping – Returns:
-
-
class
vnep_approx.gadget_model.DecisionGadget(name, request, in_node, out_nodes)¶ -
adapt_model_objective_according_to_local_profits(obj_expr)¶
-
extend_load_constraints(constraint_dict, nodes_handled_by_other_gadgets)¶
-
extend_mapping_by_own_solution(mapping, load, nodes_handled_by_other_gadgets)¶
-
generate_constraints(model)¶
-
generate_flow_induction_at_root_constraint(model)¶
-
generate_variables(model)¶
-
reduce_flow_on_last_returned_mapping(used_flow)¶
-
verify_mapping(mapping)¶
-
-
exception
vnep_approx.gadget_model.DecisionModelError¶
-
class
vnep_approx.gadget_model.ExtendedDecisionGraph(parent_gadget)¶
-
class
vnep_approx.gadget_model.GadgetContainerRequest(name, profit, rounding_threshold=0.001)¶ A request that consists of several gadgets.
The gadgets form a tree, there is exactly one root gadget and cycles are forbidden. Gadgets are connected by sharing a common node. Nodes that are designated to be used by multiple gadgets are called interface nodes.
-
adapt_objective(obj_expr)¶ Adapt the objective.
Parameters: obj_expr (gurobipy.LinExpr) – the objective expression Returns: the modified objective expression Return type: gurobipy.LinExpr
-
add_gadget(gadget)¶ Add a gadget to the request.
Parameters: gadget (AbstractGadget) – the new gadget
-
add_node_flow_var(model, i, u)¶ Return a node flow variable of a model.
Creates the variable if it does not exist.
Parameters: - model (gurobipy.Model) – LP model
- i (str) – request node
- u (str) – substrate node
Returns: the node flow variable
Return type: gurobipy.Var
-
check_and_update()¶ Check if gadgets form a tree and set the root gadget.
Raises: GadgetError – if a check fails
-
check_gadget_tree()¶ Check if the gadgets are connected as a tree.
Raises: GadgetError – if a check fails
-
check_nodes()¶ Check interface nodes and inner nodes.
Raises: GadgetError – if a check fails
-
extract_mappings()¶ Generator that yields mappings of this
GadgetContainerRequest.Returns: yields tuples of (mapping, flow_value, load_dictionary)
-
gadgets= None¶ gadgets by name
-
gadgets_by_in_nodes= None¶ map in-nodes to a corresponding list of gadgets
-
generate_constraints(model)¶ Generate LP constraints for each gadget and induce flow at root gadget.
Parameters: model (gurobipy.Model) – LP model
-
generate_variables(model)¶ Generate LP variables for each gadget.
Parameters: model (gurobipy.Model) – LP model
-
get_gadget_tree_graph()¶
-
name= None¶ request name
-
profit= None¶ request profit
-
root_gadget= None¶ the root gadget
-
rounding_threshold= None¶ rounding threshold
-
set_substrate(substrate)¶
-
update_root()¶ Update root gadget.
A root gadget is a gadget with in-nodes that are not out-nodes of other gadgets.
Raises: GadgetError – if there is not exactly one root gadget
-
verify_request_mapping(mapping)¶ Verify a request mapping.
Parameters: mapping (solutions.Mapping) – the request mapping
-
-
exception
vnep_approx.gadget_model.GadgetError¶
-
class
vnep_approx.gadget_model.GadgetModelCreator(scenario, gurobi_settings=None, optimization_callback=None, lp_output_file=None, potential_iis_filename=None, logger=None)¶ -
create_constraints_other_than_bounding_loads_by_capacities()¶
-
create_objective()¶
-
create_variables_other_than_embedding_decision_and_request_load()¶
-
post_process_fractional_computation()¶
-
post_process_integral_computation()¶
-
recover_fractional_solution_from_variables()¶
-
recover_integral_solution_from_variables()¶
-
-
exception
vnep_approx.gadget_model.MappingCombinationError¶