Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Modelo de optimización independiente de datos

Para obtener un problema de optimización escalable y reutilizable, cree el problema de forma que separe los datos del problema de la estructura del modelo.

Supongamos que tiene un problema de programación multiperíodo con varios productos. Los periodos de tiempo están en un vector, y los productos están en un vector de cadena,.periodsproducts

periods = 1:10; products = ["strawberry","cherry","red grape",...     "green grape","nectarine","apricot"];

Para crear variables que representen el número de productos utilizados en cada período, utilice sentencias que tomen tamaños de los datos. Por ejemplo:

usage = optimvar('usage',length(periods),products,...     'Type','integer','LowerBound',0);

Para cambiar posteriormente los períodos de tiempo o los productos, debe cambiar los datos sólo en y.periodsproducts A continuación, puede ejecutar el mismo código para crear.usage

En otras palabras, para mantener la flexibilidad y permitir la reutilización, no use una instrucción que tenga tamaños de datos codificados de forma rígida. Por ejemplo:

usage = optimvar('usage',10,6,... % DO NOT DO THIS     'Type','Integer','LowerBound',0);

La misma consideración se mantiene para las expresiones, así como las variables. Supongamos que los costos de los productos están en una matriz de datos, de tamaño por.costslength(periods)length(products) Para simular datos válidos, cree una matriz de enteros aleatorios del tamaño adecuado.

rng default % For reproducibility costs = randi(8,length(periods),length(products));

El procedimiento recomendado consiste en crear expresiones de coste que toman tamaños de los datos.

costPerYear = sum(costs.*usage,2); totalCost = sum(costPerYear);

De este modo, si alguna vez cambia el tamaño de los datos, las sentencias que crean y no cambian.costPerYeartotalCost En otras palabras, para mantener la flexibilidad y permitir la reutilización, no use una instrucción que tenga tamaños de datos codificados de forma rígida. Por ejemplo:

costPerYear = optimexpr(10,1); % DO NOT DO THIS totalcost = 0; for yr = 1:10 % DO NOT DO THIS     costPerYear(i) = sum(costs(i,:).*usage(i,:));     totalcost = totalcost + costPerYear(i); end

Temas relacionados