solver
1.0
|
Defines the optimization part of the parallel heuristic, i.e. sub-heuristics and the evaluation of tuples. More...
#include <HeuristicAlgorithms.h>
Public Member Functions | |
HeuristicAlgorithms (KnowledgeBase &kb, const RoboticLine &line, const PrecalculatedMapping &mapping) | |
Constructor makes references to the required data, i.e. the robotic cell, its mapping, and shared data of the heuristic. | |
std::vector< std::vector< Location * > > | initializePartialSolution (PartialSolution &ps) const |
It appends the fixed movements (implied from fixed locations), and optionally fastest power saving modes to ps data structure. More... | |
OptimalTiming | solvePartialProblem (const PartialSolution &ps, const CircuitTuple &t, Algo algo) |
Employs Linear Programming to obtain energy-efficient timing for a given tuple. More... | |
OptimalTiming | convert (const PartialSolution &ps, const Solution &s) const |
Auxiliary method that converts a general form of the solution to the timing of the robotic cell. More... | |
CollisionResolution | resolveCollision (ActivityMode *m1, double s1, double d1, ActivityMode *m2, double s2, double d2) const |
It checks whether there is a collision between two specified activities, and eventually returns how to resolve this collision. More... | |
CollisionResolution | resolveTheWorstCollision (const PartialSolution &ps, const OptimalTiming &ot, const Solution &s) const |
It finds the worst collision, i.e. with the longest time of active collision, and returns how to resolve it. More... | |
double | heuristicLocationChanges (OptimalTiming &ot, PartialSolution &ps, const std::vector< std::vector< Location * >> &fixed, bool &solutionChanged) const |
The sub-heuristic locally optimizes the robot paths (change locations) to reduce energy consumption. More... | |
double | heuristicPowerModeSelection (const OptimalTiming &ot, PartialSolution &ps, TabuList &tabuList, bool &solutionChanged) const |
The sub-heuristic tries to switch from one power saving mode to another one for a location in order to reduce energy consumption. More... | |
Private Member Functions | |
double | scaleGanttToCycleTime (std::vector< ActivityModeInfo > &robotGantt) const |
It scales durations of activities in such a way that the robot cycle time is met. Updated start times and durations are reflected in the robotGantt variable. More... | |
double | calculateBreakagePenalty (const std::vector< ActivityModeInfo > &robotGantt, const OptimalTiming &ot) const |
It calculates the penalty for the violation of time lags and collisions. More... | |
Private Attributes | |
KnowledgeBase & | mKB |
Access to the shared data of the heuristic. | |
const RoboticLine & | mLine |
Access to the robotic cell to be optimized. | |
const double | mPenaltyMultiplier |
Aggregated breakage time (see calculateBreakagePenalty) is multiplied by this constant to get the penalty. | |
const PrecalculatedMapping & | mMapping |
Fast searching in the data structure of the robotic cell. | |
Defines the optimization part of the parallel heuristic, i.e. sub-heuristics and the evaluation of tuples.
An instance of this class provides an access to the sub-heuristics and solver for partially fixed problems (called tuples). The solver determines an energy-efficient timing for fixed locations, movements, and power saving modes. The aim of the sub-heuristics is to modify tuples in such a way that would be resulting in an energy reduction.
Definition at line 38 of file HeuristicAlgorithms.h.
|
private |
It calculates the penalty for the violation of time lags and collisions.
robotGantt | Timing of the robot activities where the robot cycle time is met. |
ot | Timing of the whole robotic cell. |
Definition at line 599 of file HeuristicAlgorithms.cpp.
OptimalTiming HeuristicAlgorithms::convert | ( | const PartialSolution & | ps, |
const Solution & | s | ||
) | const |
Auxiliary method that converts a general form of the solution to the timing of the robotic cell.
ps | A partial problem with fixed locations, movements, and power saving modes. |
s | Solution of the partially fixed problem. |
Definition at line 199 of file HeuristicAlgorithms.cpp.
double HeuristicAlgorithms::heuristicLocationChanges | ( | OptimalTiming & | ot, |
PartialSolution & | ps, | ||
const std::vector< std::vector< Location * >> & | fixed, | ||
bool & | solutionChanged | ||
) | const |
The sub-heuristic locally optimizes the robot paths (change locations) to reduce energy consumption.
[in,out] | ot | Timing of the robotic cell. |
[in,out] | ps | A partial problem with fixed locations, movements, and power saving modes. |
fixed | Locations that cannot be changed because the spatial compatibility has to be preserved. | |
[out] | solutionChanged | It indicates whether the partially fixed problem was modified. |
Definition at line 305 of file HeuristicAlgorithms.cpp.
double HeuristicAlgorithms::heuristicPowerModeSelection | ( | const OptimalTiming & | ot, |
PartialSolution & | ps, | ||
TabuList & | tabuList, | ||
bool & | solutionChanged | ||
) | const |
The sub-heuristic tries to switch from one power saving mode to another one for a location in order to reduce energy consumption.
ot | Timing of the robotic cell. | |
[in,out] | ps | A partial problem with fixed locations, movements, and power saving modes. |
tabuList | A list with the forbidden modifications. | |
[out] | solutionChanged | It indicates whether the partially fixed problem was modified. |
Definition at line 410 of file HeuristicAlgorithms.cpp.
vector< vector< Location * > > HeuristicAlgorithms::initializePartialSolution | ( | PartialSolution & | ps | ) | const |
It appends the fixed movements (implied from fixed locations), and optionally fastest power saving modes to ps data structure.
[in,out] | ps | A partial problem with given fixed locations (+their order). |
Definition at line 107 of file HeuristicAlgorithms.cpp.
CollisionResolution HeuristicAlgorithms::resolveCollision | ( | ActivityMode * | m1, |
double | s1, | ||
double | d1, | ||
ActivityMode * | m2, | ||
double | s2, | ||
double | d2 | ||
) | const |
It checks whether there is a collision between two specified activities, and eventually returns how to resolve this collision.
m1 | A movement or location of the first considered activity. |
s1,d1 | Start time and duration of the first activity, respectively. |
m2 | A movement or location of the second considered activity. |
s2,d2 | Start time and duration of the second activity, respectively. |
Definition at line 251 of file HeuristicAlgorithms.cpp.
CollisionResolution HeuristicAlgorithms::resolveTheWorstCollision | ( | const PartialSolution & | ps, |
const OptimalTiming & | ot, | ||
const Solution & | s | ||
) | const |
It finds the worst collision, i.e. with the longest time of active collision, and returns how to resolve it.
ps | A partial problem with fixed locations, movements, and power saving modes. |
ot | Timing of the robotic cell. |
s | Solution of the Linear Programming problem. |
Definition at line 282 of file HeuristicAlgorithms.cpp.
|
private |
It scales durations of activities in such a way that the robot cycle time is met. Updated start times and durations are reflected in the robotGantt variable.
[in,out] | robotGantt | Timing of the robot activities where some activities have modified durations. |
Definition at line 505 of file HeuristicAlgorithms.cpp.
OptimalTiming HeuristicAlgorithms::solvePartialProblem | ( | const PartialSolution & | ps, |
const CircuitTuple & | t, | ||
Algo | algo | ||
) |
Employs Linear Programming to obtain energy-efficient timing for a given tuple.
ps | A partial problem with fixed locations, movements, and power saving modes. |
t | A tuple corresponding to the partial problem. |
algo | Specifies what was called before solving this partial problem, i.e. either a sub-heuristic or initialization phase. |
Definition at line 138 of file HeuristicAlgorithms.cpp.