Optimization Toolbox를 활용한 문제 기반 최적화
직관적인 구문을 사용해 최적화 문제, 최소제곱 문제 및 비선형 연립방정식을 정의하고 풀 수 있습니다.
| 1. 문제 정의 |
|---|
문제 기반 워크플로에 따라, 먼저 예: assignmentProb = optimproblem responseProb = optimproblem initialStateProb = eqnproblem |
| 2. 변수 정의 |
|---|
예: x = optimvar("x");
y = optimvar("y");
employees = ["a","b","c"];
tasks = ["t1","t2","t3"];
assign = optimvar("assign",employees,tasks,"LowerBound",0,"UpperBound",1,"Type","integer")
|
| 3. 목적 함수, 제약 조건 및 방정식에 사용할 표현식 정의 | |
|---|---|
지원되는 연산을 사용해 예: response = -3*(y - x.^3 - x).^2 - (x - 4/3).^2; totalCost = sum(sum(cost.*assign)); sumByEmployee = sum(assign,2); sumByTask = sum(assign,1); |
또한 예: a = 4; xyfcn = @(x,y,a)gamma(y)*a*x.^2; xyexpr = fcn2optimexpr(xyfcn,x,y,a); |
| 4. 목적 함수 정의 | |
|---|---|
최적화의 방향을 설정합니다. 스칼라 |
예: responseProb.ObjectiveSense = "maximize"; responseProb.Objective = response; assignmentProb.ObjectiveSense = "minimize"; assignmentProb.Objective = totalCost; |
| 5. 제약 조건 및 방정식 정의 |
|---|
관계 연산자를 사용해 예: responseProb.Constraints.ellipse = x.^2/2 + y.^2/4 <= 1; responseProb.Constraints.xyconstr = xyexpr >= 1; assignmentProb.Constraints.oneTaskPerEmployee = sumByTask <= 1; assignmentProb.Constraints.oneEmployeePerTask = sumByEmployee == 1; initialStateProb.Equations.eq1 = x*cos(y) + y*sin(x) == 1/2; initialStateProb.Equations.eq2 = exp(-exp(-(x + y))) == y*(1 + x^2); |
| 6. 검토 | |
|---|---|
show 및 showbounds를 사용해 문제와 변수 경계값을 표시할 수 있습니다. write 및 writebounds를 사용해 이를 파일로 저장할 수 있습니다.
|
작업 공간 브라우저를 통해 확인할 수 있습니다.
|
| 7. 풀이 및 분석 | |
|---|---|
문제를 풀어 비선형 문제의 초기점을 제공합니다. 예: x0.x = 0; x0.y = 0; [sol,fval,exitflag] = solve(responseProb,x0)
|
최적화 옵션을 사용해 풉니다. 예: o = optimoptions(assignmentProb,"MaxTime",10); sol = solve(assignmentProb,"Options",o) 추가 작업
|