An operationplan is the key dynamic element of a plan. It represents a certain quantity being planned along a certain operation during a certain date range. More...
#include <model.h>
Classes | |
class | FlowPlanIterator |
An iterator class to go through all flowplans of an operationplan. More... | |
class | iterator |
This class models an STL-like iterator that allows us to iterate over the operationplans in a simple and safe way. More... | |
class | LoadPlanIterator |
An iterator class to go through all loadplans of an operationplan. More... | |
Public Member Functions | |
bool | activate (bool useMinCounter=true) |
virtual void | addSubOperationPlan (OperationPlan *) |
void | beginElement (XMLInput &, const Attribute &) |
FlowPlanIterator | beginFlowPlans () const |
LoadPlanIterator | beginLoadPlans () const |
void | createFlowLoads () |
void | deactivate () |
void | deleteFlowLoads () |
void | endElement (XMLInput &, const Attribute &, const DataElement &) |
FlowPlanIterator | endFlowPlans () const |
LoadPlanIterator | endLoadPlans () const |
virtual void | eraseSubOperationPlan (OperationPlan *) |
virtual PyObject * | getattro (const Attribute &) |
const DateRange & | getDates () const |
Demand * | getDemand () const |
Plannable * | getEntity () const |
bool | getHidden () const |
unsigned long | getIdentifier () const |
bool | getLocked () const |
Plannable * | getMotive () const |
Operation * | getOperation () const |
OperationPlan * | getOwner () const |
double | getPenalty () const |
double | getQuantity () const |
virtual size_t | getSize () const |
const OperationPlan * | getTopOwner () const |
const MetaClass & | getType () const |
TimePeriod | getUnavailable () const |
void | insertInOperationplanList () |
bool | isExcess (bool=false) const |
OperationPlan (const OperationPlan &, bool=true) | |
bool | operator< (const OperationPlan &a) const |
void | removeFromOperationplanList () |
void | restore (const OperationPlanState &x) |
virtual int | setattro (const Attribute &, const PythonObject &) |
virtual void | setChanged (bool b=true) |
void | setDemand (Demand *l) |
virtual void | setEnd (Date) |
virtual void | setLocked (bool b=true) |
void | setMotive (Plannable *v) |
void | setOwner (OperationPlan *o) |
virtual double | setQuantity (double f, bool roundDown=false, bool update=true, bool execute=true) |
virtual void | setStart (Date) |
void | setStartAndEnd (Date st, Date nd) |
int | sizeFlowPlans () const |
int | sizeLoadPlans () const |
PyObject * | str () const |
virtual void | updateProblems () |
virtual void | writeElement (XMLOutput *, const Keyword &, mode=DEFAULT) const |
virtual | ~OperationPlan () |
![]() | |
Object () | |
virtual void | setHidden (bool b) |
virtual | ~Object () |
![]() | |
virtual PyObject * | call (const PythonObject &args, const PythonObject &kwds) |
virtual int | compare (const PyObject *other) const |
Py_ssize_t | getReferenceCount () const |
void | initType (const MetaClass *t) |
void | initType (PyTypeObject *t) |
virtual PyObject * | iternext () |
PythonExtensionBase () | |
void | resetReferenceCount () |
virtual | ~PythonExtensionBase () |
![]() | |
HasProblems () | |
virtual | ~HasProblems () |
Static Public Member Functions | |
static iterator | begin () |
static PyObject * | create (PyTypeObject *, PyObject *, PyObject *) |
static Object * | createOperationPlan (const MetaClass *, const AttributeList &) |
static void | deleteOperationPlans (Operation *o, bool deleteLocked=false) |
static bool | empty () |
static iterator | end () |
static OperationPlan * | findId (unsigned long l) |
static int | initialize () |
static unsigned long | size () |
static void | writer (const MetaCategory *, XMLOutput *) |
![]() | |
template<class T > | |
static PyObject * | create (PyTypeObject *pytype, PyObject *args, PyObject *kwds) |
template<class T > | |
static Object * | createDefault () |
template<class T > | |
static Object * | createString (const string &n) |
static PyObject * | toXML (PyObject *, PyObject *) |
![]() | |
static EntityIterator | beginEntity () |
static EntityIterator | endEntity () |
Static Public Attributes | |
static const MetaCategory * | metacategory |
static const MetaClass * | metadata |
Friends | |
class | Demand |
class | FlowPlan |
class | iterator |
class | LoadPlan |
class | Operation |
class | OperationAlternate |
class | OperationRouting |
class | ProblemPrecedence |
Additional Inherited Members | |
![]() | |
NonCopyable () | |
~NonCopyable () | |
![]() | |
static PythonType * | registerPythonType (int, const type_info *) |
![]() | |
static vector< PythonType * > | table |
An operationplan is the key dynamic element of a plan. It represents a certain quantity being planned along a certain operation during a certain date range.
From a coding perspective:
|
virtual |
Destructor.
Definition at line 485 of file operationplan.cpp.
frepple::OperationPlan::OperationPlan | ( | const OperationPlan & | src, |
bool | init = true |
||
) |
Copy constructor.
If the optional argument is false, the new copy is not initialized and won't have flowplans and loadplans.
Definition at line 708 of file operationplan.cpp.
bool frepple::OperationPlan::activate | ( | bool | useMinCounter = true | ) |
Initialize the operationplan. The initialization function should be called when the operationplan is ready to be 'officially' added. The initialization performs the following actions:
Every operationplan subclass that has sub-operations will normally need to create an override of this function.
The return value indicates whether the initialization was successfull. If the operationplan is invalid, it will be DELETED and the return value is 'false'.
Definition at line 196 of file operationplan.cpp.
|
virtual |
Add a sub-operationplan to the list.
Definition at line 364 of file operationplan.cpp.
|
inlinestatic |
Called while restoring the model from an XML-file.
This is called for each element within the "this" element, for which the "this" element is immediate parent.
It is called when the open element tag is encountered.
Reimplemented from frepple::utils::Object.
Definition at line 961 of file operationplan.cpp.
|
inline |
|
inline |
|
static |
Python factory method.
Definition at line 1037 of file operationplan.cpp.
void frepple::OperationPlan::createFlowLoads | ( | ) |
This function is used to create the loadplans, flowplans and setup operationplans.
Definition at line 444 of file operationplan.cpp.
|
static |
This is a factory method that creates an operationplan pointer based on the name and id, which are passed as an array of character pointers. This method is intended to be used to create objects when reading XML input data.
Definition at line 71 of file operationplan.cpp.
void frepple::OperationPlan::deactivate | ( | ) |
Remove an operationplan from the list of officially registered ones.
The operationplan will keep its loadplans and flowplans after unregistration.
Definition at line 285 of file operationplan.cpp.
void frepple::OperationPlan::deleteFlowLoads | ( | ) |
This function is used to delete the loadplans, flowplans and setup operationplans.
Definition at line 467 of file operationplan.cpp.
|
static |
Deletes all operationplans of a certain operation. A boolean flag allows to specify whether locked operationplans are to be deleted too.
Definition at line 812 of file operationplan.cpp.
|
inlinestatic |
|
inlinestatic |
|
virtual |
Called while restoring the model from an XML-file.
This is called when the corresponding close element tag is encountered, and the Data() member of pElement is valid.
Implements frepple::utils::Object.
Definition at line 972 of file operationplan.cpp.
|
inline |
|
inline |
|
virtual |
Remove a sub-operation_plan from the list.
Definition at line 405 of file operationplan.cpp.
|
static |
Searches for an OperationPlan with a given identifier.
Returns a NULL pointer if no such OperationPlan can be found.
The method is of complexity O(n), i.e. involves a LINEAR search through the existing operationplans, and can thus be quite slow in big models.
The method is O(1), i.e. constant time regardless of the model size, when the parameter passed is bigger than the operationplan counter.
Definition at line 180 of file operationplan.cpp.
|
virtual |
Default getattro method.
Subclasses are expected to implement an override if the type supports gettattro.
Reimplemented from frepple::utils::PythonExtensionBase.
Definition at line 1092 of file operationplan.cpp.
|
inline |
|
inline |
|
inlinevirtual |
Implement the pure virtual function from the HasProblem class.
Implements frepple::HasProblems.
|
inlinevirtual |
Returns whether an entity is real or dummy.
Reimplemented from frepple::utils::Object.
|
inline |
Returns a unique identifier of the operationplan.
The identifier can be specified in the data input (in which case we check for the uniqueness during the read operation).
For operationplans created during a solver run, the identifier is assigned in the instantiate() function. The numbering starts with the highest identifier read in from the input and is then incremented for every operationplan that is registered.
|
inline |
|
inline |
|
inline |
|
inline |
Returns a pointer to the operationplan for which this operationplan a sub-operationplan.
The method returns NULL if there is no owner defined.
E.g. Sub-operationplans of a routing refer to the overall routing operationplan.
E.g. An alternate sub-operationplan refers to its parent.
double frepple::OperationPlan::getPenalty | ( | ) | const |
Calculate the penalty of an operationplan.
It is the sum of all setup penalties of the resources it loads.
Definition at line 825 of file operationplan.cpp.
|
inline |
|
inlinevirtual |
Return the memory size of the object in bytes.
Implements frepple::utils::Object.
|
inline |
|
inlinevirtual |
Return the metadata. We return the metadata of the operation class, not the one of the operationplan class!
Implements frepple::utils::Object.
TimePeriod frepple::OperationPlan::getUnavailable | ( | ) | const |
Calculate the unavailable time during the operationplan. The regular duration is extended with this amount.
Definition at line 898 of file operationplan.cpp.
|
static |
Definition at line 37 of file operationplan.cpp.
void frepple::OperationPlan::insertInOperationplanList | ( | ) |
This method links the operationplan in the list of all operationplans maintained on the operation.
In most cases calling this method is not required since it included in the activate method. In exceptional cases the solver already needs to see uncommitted operationplans in the list - eg for the procurement buffer.
Definition at line 303 of file operationplan.cpp.
bool frepple::OperationPlan::isExcess | ( | bool | strict = false | ) | const |
Return true if the operationplan is redundant, ie all material it produces is not used at all.
If the optional argument is false (which is the default value), we check with the minimum stock level of the buffers. If the argument is true, we check with 0.
Definition at line 840 of file operationplan.cpp.
bool frepple::OperationPlan::operator< | ( | const OperationPlan & | a | ) | const |
Comparison of 2 OperationPlans. To garantuee that the problems are sorted in a consistent and stable way, the following sorting criteria are used (in order of priority):
Multiple operationplans for the same values of the above keys can exist.
Definition at line 429 of file operationplan.cpp.
void frepple::OperationPlan::removeFromOperationplanList | ( | ) |
This method remove the operationplan from the list of all operationplans maintained on the operation.
Definition at line 347 of file operationplan.cpp.
|
inline |
|
virtual |
Default setattro method.
Subclasses are expected to implement an override if the type supports settattro.
Reimplemented from frepple::utils::PythonExtensionBase.
Definition at line 1149 of file operationplan.cpp.
|
virtual |
Definition at line 58 of file operationplan.cpp.
void frepple::OperationPlan::setDemand | ( | Demand * | l | ) |
Updates the demand to which this operationplan is a solution.
Definition at line 1019 of file operationplan.cpp.
|
virtual |
Updates the end date of the operationplan and compute the start date.
Locked operationplans are not updated by this function.
Slack can be introduced between sub operationaplans by this method, i.e. the sub operationplans are only moved if required to meet the end date.
Definition at line 561 of file operationplan.cpp.
|
virtual |
Locks/unlocks an operationplan. A locked operationplan is never changed.
Definition at line 1007 of file operationplan.cpp.
|
inline |
void frepple::OperationPlan::setOwner | ( | OperationPlan * | o | ) |
Updates the operationplan owning this operationplan. In case of a OperationRouting steps this will be the operationplan representing the complete routing.
Definition at line 520 of file operationplan.cpp.
|
virtual |
Updates the quantity.
The operationplan quantity is subject to the following rules:
Definition at line 591 of file operationplan.cpp.
|
virtual |
Updates the start date of the operationplan and compute the end date.
Locked operation_plans are not updated by this function.
Slack can be introduced between sub operationaplans by this method, i.e. the sub operationplans are only moved if required to meet the start date.
Definition at line 531 of file operationplan.cpp.
Fixes the start and end date of an operationplan. Note that this overrules the standard duration given on the operation, i.e. no logic kicks in to verify the data makes sense. This is up to the user to take care of.
The methods setStart(Date) and setEnd(Date) are therefore preferred since they properly apply all appropriate logic.
|
inlinestatic |
|
inline |
|
inline |
|
inlinevirtual |
Default str method.
Subclasses are expected to implement an override if the type supports conversion to a string.
Reimplemented from frepple::utils::PythonExtensionBase.
|
virtual |
Problem detection is actually done by the Operation class. That class actually "delegates" the responsability to this class, for efficiency.
Implements frepple::HasProblems.
Definition at line 40 of file problems_operationplan.cpp.
|
virtual |
Called while writing the model into an XML-file. The user class should write itself out, using the IOutStream members for its "simple" members and calling writeElement recursively for any contained objects. Not all classes are expected to implement this method. In instances of such a class can be created but can't be persisted. E.g. Command
Reimplemented from frepple::utils::Object.
Definition at line 918 of file operationplan.cpp.
|
static |
Handles the persistence of operationplan objects.
Definition at line 906 of file operationplan.cpp.
|
friend |
|
friend |
|
friend |
|
static |