Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Introducción a la tarea Optimize basada en problemas de Live Editor

Este script de ejemplo ayuda a utilizar la tarea Optimize basada en problemas de Live Editor para realizar optimizaciones o resolver ecuaciones. Modifique el script para su propio problema.

El script resuelve un problema de optimización no lineal con restricciones no lineales:

Minimice rosenbrock(x,y,a)=log(1+a(y-x2)2+(1-x)2) sujeto a la restricción x2+y21, donde a=100 y el punto inicial x0 tiene x=-2,y=2. Asimismo, imponga los límites -3x3, -2y9.

El código de la función objetivo aparece al final de este script.

Incluir parámetros o datos

Habitualmente, tiene datos o valores para pasar al solver. Coloque esos valores en la sección de entrada (donde vea x0x y x0y) y ejecute la sección seleccionando Section > Run Section (Sección > Ejecutar sección) o pulsando Control+Enter.

Establezca los componentes de punto inicial x0x y x0y, y escale a para la optimización.

x0x = -2;
x0y = 2;
a = 100;

Coloque estos valores y cualquier otro dato del problema en el espacio de trabajo ejecutando esta sección antes de proceder.

Tarea Optimize de Live Editor

Por lo general, se coloca la tarea Optimize de Live Editor en el script seleccionando Task > Optimize en la pestaña Live Editor o seleccionando Task > Optimize en la pestaña Insert. Después, se presenta la siguiente opción (esto solo es una imagen, no la tarea real):

optimizelet_choose.png

Para obtener la tarea basada en problemas, haga clic en Problem-based (recommended).

La siguiente tarea basada en problemas tiene las variables, el objetivo y la restricción completadas. Modifíquelos para su problema o ejecútelo tal y como está para ver cómo funciona la tarea. Para modificar el problema, haga clic en el botón Define problem en la parte inferior de la tarea. Para ejecutar la tarea, haga clic en el botón Solve problem en la parte inferior de la tarea.

Live Task
  OptimizationProblem : 

	Solve for:
       x, y

	minimize :
       log(((1 + (100 .* (y - x.^2).^2)) + (1 - x).^2))


	subject to :
       (x.^2 + y.^2) <= 1

	variable bounds:
       -3 <= x <= 3

       -2 <= y <= 9
Solving problem using fmincon.

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.
solution = struct with fields:
    x: 0.7864
    y: 0.6177

reasonSolverStopped = 
    OptimalSolution

objectiveValue = 0.0447

Interpretar los resultados

La tarea llama a solve, que llama a fmincon para resolver el problema. La parte superior de la tarea muestra que la solución se devuelve en estructura solution. La solución indicada, x = 0.7864 e y = 0.6177, cumple la restricción x2+y21, como puede ver en el siguiente cálculo.

solution.x^2 + solution.y^2                                     
ans = 1.0000

El solver informa de la condición de salida OptimalSolution cuando se detiene. Para interpretar esta condición, observe el exitflag Argumentos de salida para el solver fmincon. La descripción expone que "La medida de optimalidad de primer orden es inferior a options.OptimalityTolerance y la vulneración de restricciones máxima es inferior a options.ConstraintTolerance". Dicho de otro modo, la solución es un mínimo local factible.

El valor de la función objetivo en la solución es 0,0457. Se trata del menor valor de función objetivo entre los puntos factibles.

Funciones auxiliares

Este código crea la función auxiliar rosenbrock.

function objective = rosenbrock(x,y,a)
% This function should return a scalar representing an optimization objective.

% Example: Concession stand profit
% revenue = 3*soda + 5*popcorn + 2*candy;
% cost = 1*soda + 2*popcorn + 0.75*candy;
% objective = revenue - cost; % profit

% Edit the lines below with your calculations.
objective = log(1 + a*(y - x^2)^2 + (1 - x)^2);
end

Consulte también