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.

prob2struct

Convierta el problema de optimización en forma de solucionador

Descripción

ejemplo

problem = prob2struct(prob) Devuelve una estructura de problema de optimización adecuada para resolver problemas utilizando,,,, o.linprogintlinprogquadproglsqlinfminconfminunc Para problemas no lineales, crea archivos para la función objetiva y, si es necesario, para funciones de restricción no lineal y archivos auxiliares.prob2struct

ejemplo

problem = prob2struct(prob,x0) también convierte la estructura de puntos inicial y la incluye.x0problem

ejemplo

problem = prob2struct(___,Name,Value), para los argumentos de entrada, especifica opciones adicionales mediante uno o varios argumentos de par nombre-valor. Por ejemplo, para un problema no lineal, especifica que crea un archivo de función objetivo denominado en la carpeta actual.problem = prob2struct(prob,'ObjectiveFunctionName','objfun1')prob2structobjfun1.m

Ejemplos

contraer todo

Convierta un objeto de problema de optimización en una estructura problemática.

Ingrese el problema básico del MILP de.Fundamentos de programación lineal de enteros mixtos: basado en problemas

ingots = optimvar('ingots',4,1,'Type','integer','LowerBound',0,'UpperBound',1); alloys = optimvar('alloys',4,1,'LowerBound',0);  weightIngots = [5,3,4,6]; costIngots = weightIngots.*[350,330,310,280]; costAlloys = [500,450,400,100]; cost = costIngots*ingots + costAlloys*alloys;  steelprob = optimproblem; steelprob.Objective = cost;  totalweight = weightIngots*ingots + sum(alloys);  carbonIngots = [5,4,5,3]/100; molybIngots = [3,3,4,4,]/100; carbonAlloys = [8,7,6,3]/100; molybAlloys = [6,7,8,9]/100;  totalCarbon = (weightIngots.*carbonIngots)*ingots + carbonAlloys*alloys; totalMolyb = (weightIngots.*molybIngots)*ingots + molybAlloys*alloys;  steelprob.Constraints.conswt = totalweight == 25; steelprob.Constraints.conscarb = totalCarbon == 1.25; steelprob.Constraints.consmolyb = totalMolyb == 1.25;

Convierta el problema en una estructura problemática.intlinprog

problem = prob2struct(steelprob);

Examine la matriz de restricción de igualdad lineal resultante y el vector.

Aeq = problem.Aeq
Aeq =     (1,1)       1.0000    (2,1)       0.0800    (3,1)       0.0600    (1,2)       1.0000    (2,2)       0.0700    (3,2)       0.0700    (1,3)       1.0000    (2,3)       0.0600    (3,3)       0.0800    (1,4)       1.0000    (2,4)       0.0300    (3,4)       0.0900    (1,5)       5.0000    (2,5)       0.2500    (3,5)       0.1500    (1,6)       3.0000    (2,6)       0.1200    (3,6)       0.0900    (1,7)       4.0000    (2,7)       0.2000    (3,7)       0.1600    (1,8)       6.0000    (2,8)       0.1800    (3,8)       0.2400  
beq = problem.beq
beq = 3×1

   25.0000
    1.2500
    1.2500

Examine los límites.

problem.lb
ans = 8×1

     0
     0
     0
     0
     0
     0
     0
     0

problem.ub
ans = 8×1

   Inf
   Inf
   Inf
   Inf
     1
     1
     1
     1

Resuelva el problema llamando.intlinprog

x = intlinprog(problem)
LP:                Optimal objective value is 8125.600000.                                            Cut Generation:    Applied 3 mir cuts.                                                                                  Lower bound is 8495.000000.                                                                          Relative gap is 0.00%.                                                             Optimal solution found.  Intlinprog stopped at the root node because the objective value is within a gap tolerance of the optimal value, options.AbsoluteGapTolerance = 0 (the default value). The intcon variables are integer within tolerance, options.IntegerTolerance = 1e-05 (the default value). 
x = 8×1

    7.2500
         0
    0.2500
    3.5000
    1.0000
    1.0000
         0
    1.0000

Cree un problema no lineal en el marco de trabajo basado en problemas.

x = optimvar('x',2); fun = 100*(x(2) - x(1)^2)^2 + (1 - x(1))^2; prob = optimproblem('Objective',fun); mycon = dot(x,x) <= 4; prob.Constraints.mycon = mycon; x0.x = [-1;1.5];

Convertir a una estructura de problemas de optimización.prob Asigne un nombre al archivo de función objetivo generado y al archivo de función de restricción.'rosenbrock''circle2'

problem = prob2struct(prob,x0,'ObjectiveFunctionName','rosenbrock',...     'ConstraintFunctionName','circle2');

crea archivos de función de restricción y objetivo no lineales en la carpeta actual.prob2struct Para crear estos archivos en una carpeta diferente, utilice el par nombre-valor.'FileLocation'

Resuelve el problema.

[x,fval] = fmincon(problem)
Local minimum found that satisfies the constraints.  Optimization completed because the objective function is non-decreasing in  feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. 
x = 2×1

    1.0000
    1.0000

fval = 4.6241e-11 

Argumentos de entrada

contraer todo

Problema de optimización, especificado como un objeto.OptimizationProblem Crear un problema mediante el uso de.optimproblem

Ejemplo: prob = optimproblem; prob.Objective = obj; prob.Constraints.cons1 = cons1;

Punto inicial, especificado como una estructura con nombres de campo iguales a los nombres de variable en.prob

Para obtener un ejemplo con las variables de índice con nombre, vea.x0Cree un punto inicial para la optimización con variables de índice guardadas

Ejemplo: Si tiene variables nombradas y:.probxyx0.x = [3,2,17]; x0.y = [pi/3,2*pi/3]

Tipos de datos: struct

Argumentos de par nombre-valor

Especifique pares de argumentos separados por comas opcionales. es el nombre del argumento y es el valor correspondiente. deben aparecer dentro de las cotizaciones.Name,ValueNameValueName Puede especificar varios argumentos de par de nombre y valor en cualquier orden como.Name1,Value1,...,NameN,ValueN

Ejemplo: problem = prob2struct(prob,'FileLocation','C:\Documents\myproblem')

Nombre del archivo de función de restricción no lineal creado por, especificado como el par separado por comas que consta de un nombre de archivo.prob2struct'ConstraintFunctionName' Este argumento se aplica a los problemas; Ver.fminconfminuncproblem No incluya la extensión de archivo en el nombre de archivo. anexa la extensión de archivo cuando crea el archivo..mprob2struct

Si no se especifica, se sobrescribe.ConstraintFilenameprob2struct'generatedConstraints.m' Si no se especifica, se crea el archivo en la carpeta actual.FileLocationprob2struct

La estructura devuelta hace referencia a este archivo de función.problem

Ejemplo: "mynlcons"

Tipos de datos: char | string

Ubicación de los archivos generados (función objetiva, función de restricción y otros archivos de subfunción), especificados como el par separado por comas que consta de una ruta de acceso a una carpeta de escritura.'FileLocation' Todos los archivos generados se almacenan en esta carpeta; no se admiten varias carpetas.

Ejemplo: 'C:Documents\MATLAB\myproject'

Tipos de datos: char | string

Nombre del archivo de función objetivo creado por, especificado como el par separado por comas que consta de un nombre de archivo.prob2struct'ObjectiveFunctionName' Este argumento se aplica a los problemas; Ver.fminconfminuncproblem No incluya la extensión de archivo en el nombre de archivo. anexa la extensión de archivo cuando crea el archivo..mprob2struct

Si no se especifica, se sobrescribe.ObjectiveFilenameprob2struct'generatedObjective.m' Si no se especifica, se crea el archivo en la carpeta actual.FileLocationprob2struct

La estructura devuelta hace referencia a este archivo de función.problem

Ejemplo: "myobj"

Tipos de datos: char | string

Opciones de optimización, especificadas como el par separado por comas que consta de un objeto de opciones creado por.'Options'optimoptions Crear opciones para el solucionador adecuado; Ver.problem

Ejemplo: optimoptions('fmincon','PlotFcn','optimplotfval')

Argumentos de salida

contraer todo

Estructura del problema, devuelta como estructura, estructura, estructura, estructura, estructura o estructura.intlinprogproblemlinprogproblemquadprogproblemlsqlinproblemfminconproblemfminuncproblem

Objetivos y tipos de restricción (las restricciones lineales incluyen límites)

Tipo de problema resultante

Objetivos lineales y funciones de restricción.

Al menos una variable de problema tiene el tipo.'integer'

intlinprog

Objetivos lineales y funciones de restricción.

Ninguna variable de problema tiene el tipo.'integer'

linprog

Funciones de restricción lineal.

La función objetiva es una constante más una suma de cuadrados de expresiones lineales.

lsqlin

Funciones de restricción lineal.

Función general cuadrática objetivo.

quadprog

Función objetiva general no lineal.

Sin restricciones.

fminunc

Función objetiva general no lineal, y hay al menos una restricción de cualquier tipo.

O, hay al menos una función de restricción no lineal general.

fmincon

Nota

Para problemas no lineales, crea archivos de función para las funciones de restricción objetiva y no lineal.prob2struct Para las funciones objetivas y de restricción que llaman a funciones auxiliares, también crea archivos de función auxiliares y los almacena en la carpeta.prob2structFileLocation

Para los problemas lineales y cuadráticos, la estructura problemática incluye un campo adicional, que representa una constante aditiva para la función objetiva.f0 Si resuelve la estructura del problema con el solucionador especificado, el valor de la función objetiva devuelta no incluye el valor.f0 Si resuelve el uso de la función, el valor de la función objetiva devuelta incluye el valor.probsolvef0

Si el de es o, entonces utiliza el negativo de la función objetiva en porque los solucionadores minimizan.ObjectiveSenseprob'max''maximize'problemprob Para maximizar, minimizan el negativo de la función objetiva original. En este caso, el valor de función óptimo notificado del solucionador es el negativo del valor en el problema original. Ver.Maximizando un objetivo No se puede utilizar para un problema de maximización.lsqlin

Sugerencias

  • Si llama varias veces en la misma sesión para problemas no lineales, use los argumentos de par nombre-valor y, si corresponde,.prob2structMATLAB®ObjectiveFunctionNameConstraintFunctionName La especificación de nombres únicos garantiza que las estructuras problemáticas resultantes se refieren a las funciones correctas de restricción y objetivo. De lo contrario, las llamadas subsiguientes pueden hacer que los archivos de función no lineales generados sobrescriban los archivos existentes.prob2struct

  • Para evitar provocar una recursividad infinita, no llame dentro de una función objetiva o de restricción.prob2struct

  • Cuando se llama en paralelo para problemas no lineales, asegúrese de que los archivos de función objetivo y restricción resultantes tienen nombres únicos.prob2struct Al hacerlo, se evita que cada paso de la escritura de bucle en el mismo archivo o archivos.

Algoritmos

La base para la estructura del problema es una ordenación implícita de todas las variables de problema en un solo vector. El orden de las variables de problema es el mismo que el orden de la propiedad en.Variablesprob Ver.OptimizationProblem También puede encontrar el pedido mediante el uso de.varindex

Por ejemplo, supongamos que las variables de problema están en este orden:

  • — una matriz de 3 por 2 por 4x

  • — una matriz de 3 por 2y

En este caso, el orden de la variable implícita es el mismo que si la variable de problema es.vars = [x(:);y(:)]

Los primeros 24 elementos de son equivalentes a, y los seis siguientes elementos equivalen a, para un total de 30 elementos.varsx(:)y(:) Los límites inferior y superior corresponden a esta orden de variable, y cada matriz de restricción lineal tiene 30 columnas.

Para problemas con las funciones generales de objetivo o restricción no lineales, crea archivos de función en la carpeta actual o en la carpeta especificada por.prob2structFileLocation La estructura devuelta hace referencia a estos archivos de función.problem

Introducido en R2017b