이 질문을 팔로우합니다.
- 팔로우하는 게시물 피드에서 업데이트를 확인할 수 있습니다.
- 정보 수신 기본 설정에 따라 이메일을 받을 수 있습니다.
What procedure I should use to minimize this function?
조회 수: 1 (최근 30일)
이전 댓글 표시
amine&&
2016년 7월 7일
How i should proceed to minimize The objective function?
Thanks!
댓글 수: 20
jgg
2016년 7월 7일
You'll probably want to try a couple of things, but since you have a constraint optimization problem, I suggest fmincon first.
It's also a very, very good idea to move this:
%load the dataset
filename = 'BS_1.xlsx';
y = xlsread(filename);
yS=y(1:288);
Out of your function. You want all the data loading and stuff to be done a single time, not every function evaluation. Pass it into your function:
function X=mFunction(alpha,beta,yS)
instead, then optimize an anonymous version instead:
func = @(a,b)mFunction(a,b,yS)
jgg
2016년 7월 7일
편집: jgg
2016년 7월 7일
That's why you have to do the other stuff I pointed out.
1) Re-write your function so it takes yS as an input instead of loading it
2) Make an anonymous version of the function which inputs yS
3) Optimize the anonymous function.
These are the bottom two things in my post.
amine&&
2016년 7월 7일
When I use :
>> func = @(a,b)mFunction(a,b,yS)
func =
@(a,b)mFunction(a,b,yS)
>> x = fmincon(func,xnew,A,b,Aeq,beq,lb,ub)
MATLAB launches the following error :
Error using @(a,b)mFunction(a,b,yS)
Not enough input arguments.
Error in fmincon (line 534)
initVals.f = feval(funfcn{3},X,varargin{:});
Caused by:
Failure in initial user-supplied objective function evaluation. FMINCON cannot continue.
Thanks!
jgg
2016년 7월 7일
Think about it this way; when you minimize your function, you're going to be calling the function thousands, if not millions of times.
Every time you call the function, you have to:
1) Create a filename object
2) Read data from the hard drive into memory
3) Turn the loaded data into a matlab matrix
4) Process the matrix in yS
This is load of un-necessary work which is going to make your minimization much, much slower. If it takes 1 second to read it, and you're going to run this a hundred thousand times, you're wasting 27 hours for no reason.
jgg
2016년 7월 7일
Your func takes two input; you're only passing one.
If you need to optimize over both alpha and beta you probably need to write a function like this:
func = @(x)mFunction(x(1),x(2),yS);
instead. But, this requires these to be scalars; I don't know you function well enough. Just be aware that when you optimize you pass a single vector, so your function needs to take a single vector.
amine&&
2016년 7월 7일
편집: amine&&
2016년 7월 7일
I totally greement with you. We do not load the data for each use of the function. but I do not know is there a way to recover without being required to load every time. especially when I try to start the minimization procedure I obtien the following error message :
>> x = fmincon(func,xnew,A,b,Aeq,beq,lb,ub)
Undefined function or variable 'y'.
Error in mFunction (line 51)
X = mean((y(26:264)-PREV2(26:264)).^2);
Error in @(x)mFunction(x(1),x(2),yS)
Error in fmincon (line 534)
initVals.f = feval(funfcn{3},X,varargin{:});
Thanks!
jgg
2016년 7월 7일
편집: jgg
2016년 7월 7일
You're passing yS not y. Your function cannot use something you do not call. You could just pass y instead; change everything above to use y instead of yS, and add the line which creates yS to your function.
This is very straightforward; you need to think carefully about what you're trying to do, and then make sure everything works. The goal is to remove your data loading from your function; you will have to tweak what is passed into the function and how the function is written to get this to work, but it's not difficult to do.
Your workflow, when you do optimization is like this:
data = loadData();
func = @(x)myFunction(x,data)
output = doOptimize(func);
amine&&
2016년 7월 7일
In my case. The following code works perfectly
>> lb = [0,0];
>> ub = [1,1];
>> A = [];
>> b = [];
>> Aeq = [];
>> beq = [];
>> x0 = [0.5,0.5];
>> x = fmincon(@(x)mFunction(x(1),x(2)),x0,A,b,Aeq,beq,lb,ub)
MATLAB gives me as solution :
Local minimum found that satisfies the constraints.
Optimization completed because the objective function is non-decreasing in
feasible directions, to within the default value of the function tolerance,
and constraints are satisfied to within the default value of the constraint tolerance.
<stopping criteria details>
x =
0.0026 0.9964
Whereas when I draw the graph in 3D solution is a little meadows equal to [0.99,0.99]. Thanks!
amine&&
2016년 7월 7일
Even if i change the initial point "e.g (0.99,0.99)", its given't the correct result. For tolerance I do not know how to change it
jgg
2016년 7월 7일
Check the function value near the points; are you sure that it is an optimum? You might have a subtle bug in your function you will need to track down.
amine&&
2016년 7월 7일
I checked and this is what I got :
>> mFunction(0.99,0.99)
ans =
6.6666e-04
>> mFunction(0.8,0.8)
ans =
8.7804e-04
>> mFunction(0.6,0.6)
ans =
0.0014
>> mFunction(0.1,0.1)
ans =
0.0037
jgg
2016년 7월 7일
You said that you ran the optimization and it gave you a point (0.0026 0.9964); what is the value of the function at that point?
jgg
2016년 7월 7일
This value is actually smaller than the 0.99, 0.99 point you found, so the optimization is working properly; this IS the minimum of that function. You probably need to look more closely at the function you are optimizing if this isn't what you expect.
amine&&
2016년 7월 7일
I totally agree with you. I am trying to verify this hypothesis. I rependre you later if I find the solution to this problem.
답변 (0개)
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!오류 발생
페이지가 변경되었기 때문에 동작을 완료할 수 없습니다. 업데이트된 상태를 보려면 페이지를 다시 불러오십시오.
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
아시아 태평양
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)