#499 closed enhancement (fixed)
Facilidad para definir restricciones de orden
Reported by: | atorre | Owned by: | Pedro Gea |
---|---|---|---|
Priority: | major | Milestone: | Release 0.6 |
Component: | Parameters | Keywords: | parámetros, restricciones |
Cc: |
Description (last modified by )
Hola MMS,
sería ideal poder expresar restricciones de parámetros de la siguiente forma:
Dado un conjunto de parámetros:
Set _.parameters = SetOfAnything( [["Veh.Mot.Mat", "Crisis.200801", [["Linear", 0]] ]], [["Veh.Mot.Mat", "Crisis.200802", [["Linear", 0]] ]], [["Veh.Mot.Mat", "Crisis.200803", [["Linear", 0]] ]], [["Veh.Mot.Mat", "Crisis.200804", [["Linear", 0]] ]], [["Veh.Mot.Mat", "Crisis.200805", [["Linear", 0]] ]] );
si queremos expresar que el primero es menor o igual que el segundo y el segundo que el tercero, etc, poder expresarlo igual que se hace al definir las variables calculadas. Algo así como:
º1 <= º2 <= º3 <= º4 <= º5
Change History (5)
comment:1 Changed 14 years ago by
comment:2 Changed 14 years ago by
Description: | modified (diff) |
---|---|
Status: | new → accepted |
Summary: | Facilidad para definir restricciones → Facilidad para definir restricciones de orden |
Nota: Se recomienda encerrar el código entre triples llaves para facilitar su lectura.
Algo como:
Si está dentro de una línea de texto: {{{Real a = 1}}} Si son nuevas líneas: {{{ Real a = 1; }}}
comment:3 Changed 14 years ago by
comment:4 Changed 14 years ago by
Resolution: | → fixed |
---|---|
Status: | accepted → closed |
A continuación se ilustra el método implementado con un ejemplo que podría ser utilizado en el ejemplo MatVeh:
Set model::CreateMCombinations_OrderConstraint([[ // El nombre para el conjunto de m-combinaciones es obligatorio Text _.name = "OrderConstraint_Pib.es.Men"; // El signo de la restricción de orden es opcional. Por defecto es 1. // sign:1 => p1 < p2 < ... < pN // sign:-1 => p1 > p2 > ... > pN Real _.sign = 1; // El conjunto de parámetros en la restricción de orden es necesario Set _.parameters = [[ [["Veh.Tur.Mat", "Pib.es.Men", "Linear.0" ]], [["Veh.Bus.Mat", "Pib.es.Men", "Linear.0" ]], [["Veh.CaF.Mat", "Pib.es.Men", "Linear.0" ]], "Veh.Mot.Mat__Pib.es.Men__Linear.0", model::GetParameter([["Veh.Tra.Mat", "Pib.es.Men", "Linear.0"]]), model::GetParameter("Veh.Otr.Mat__Pib.es.Men__Linear.0") ]] // Los parámetros se indican de distintas maneras para mostrar las // posibilidades disponibles ]]);
comment:5 Changed 14 years ago by
Por cierto es de agradecer el código indicado en el tique como sugerencia. Ha sido de utilidad.
Nótese que existe la posibilidad de crear la restricción al mismo tiempo que la m-combinación del siguiente modo:
MMS::@MCombination mComb = model::CreateMCombination([[ Text _.name = "CombOrder"+ IntText(comb) +".."+ IntText(Rand(1, 1000)); Set _.parameters = SetOfAnything(param[comb], param[comb+1]); Set _.coefficients = SetOfReal(orden, -orden); NameBlock _.constraint = [[ Real _.inferiorValue = ?; Real _.superiorValue = 0 ]] ]]);
Nótese que los parámetros pueden expresarse mediante (i) el identificador del parámetro, (ii) el conjunto de nombres submodelo-términoExplicativo-parámetro o (iii) mediante una misma instancia del parámetro.
A quien le pueda interesar, subo una función para crear las restricciones de ordenación de un conjunto de parámetros:
Real CreateMConstraintOrdered(NameBlock model, Set param, Real orden)
{
};
está preparado para recibir un modelo, un conjunto de objetos MMS::@ParameterSigma2 y un valor 1 (ascendente) o -1 (descendente).