2011年10月18日 星期二

最佳化有感!

最近因為需要使用MATLAB來跑位移的最佳化,但是對MATLAB的概念根本是小兒科,除了一堆基本的問題沒搞清楚外更別提要如何做最佳化了!:(
但是看了半天,終於釐清最佳化的頭緒了,第一個就是需要目標方程式,第二個就是限制方程式,最後就是要"我猜我猜我猜猜了!"也就是初始值的GUESS!
因為我在看的一篇論文其中他使用了FMINCON的SOLVER方法,他說了兩個準則。
1) the ratios of the measured damage displacements from the column database to the calculated damage displacements had a mean value equal to 1.0
2) the coefficient of variation (COV) of the ratios was minimized.

我從兩年前就看過這句話,但是看很明白但是如何用?就像武俠小說中的口訣,背得很熟,但是如何使勁發招,完全不靠譜呀!!! 更別提如何用最佳化,因為根本就搞不懂。但是人就是如此卑賤,被逼到梁山了,不得不發狠,於是好好找了一堆文件,看了半天,沒用就是沒用!不得已只好發問了原始作者,沒答!只好發問題於網路:

問題如下:
若已知一資料庫如下:

Y a b c
.4 1 3 4
.6 2 4 7
.9 3 9 3
1 4 3 3

回歸方程式假設如下:

y=x1*(1+x2*a)*(1+x3*b)^-2*(1+x4*c)^1.5

條件式需求如下:
平均的Y需等於計算後的平均的y
計算後的變異係數需最小(minimize)
其中的x1~x4為待求之係數

試問 利用MATLAB中的optimization 的中fmincon目標方程式與條件方程式該如何撰寫?

在中國的小木蟲與知識+發問,小木蟲的回答不切題,台灣的延長了一次,心想唉!完了,天要滅我!要轉路了
沒想到善心人士-->Elisha,彷如白衣大士來臨回了文,當時我覺得不會又不切題唄!
一看,怪怪回得有模有樣!
ANS:
主要有兩個m檔, 一個為你的程式, 一個為fmincon的執行程式
-----------------------------------------
function f = model_1(x)
x
yg = mean([0.4, 0.6, 0.9, 1.0]);
a = [1, 2, 3, 4];
b = [3, 4, 9, 3];
c = [4, 7, 3, 3];
ys = mean(x(1)*(1 + x(2)*a).*(1 + x(3)*b).^-2.*(1 + x(4)*c).^1.5);
f = abs(yg - ys);
-----------------------------------------
clear all
clc
% Initial Guess
x0 = [0; 0; 0; 0];
A = []; b = [];
Aeq = []; beq = [];
lb = [-10;-10;-10;-10];
ub = [10;10;10;10];
nonlcon = [];
[x,fval,exitflag] = fmincon(@(x) model_1(x),x0,A,b,Aeq,beq,lb,ub,nonlcon);
-----------------------------------------
我找出來的x如下所示
x =
1.7471
-0.1154
0.3006
0.2143
誤差值
fval =
7.1505e-007

他點醒我兩件事,一是我當初自己也寫過但是他明白告訴我當時我寫的方式是大錯,應該用行列式的格式,我寫成矩陣,笨!第二個是目標方程式的寫法是很單純的,而不是y=x1*(1+x2*a)*(1+x3*b)^-2*(1+x4*c)^1.5,蠢!

經過嘗試後,發現該答案仍無法達到我的需要,但是卻點醒我格式的基本問題。於是又在苦思兩天,忽然清晨中腦海靈光一現,恍然大悟!!!!這老美那兩點點出了核心,但未察覺,這個死老美,害我想破頭,原來:
2) the coefficient of variation (COV) of the ratios was minimized.-->這個就是目標方程式
1) the ratios of the measured damage displacements from the column database to the calculated damage displacements had a mean value equal to 1.0-->這個就是限制方程式
於是將ELISHA的內容改寫,重新再跑! YES! 跑出來的不僅合理且也符合標準!
但也發現老美的問題
(1)根本不相等! (騙我)
(2)COV也不是最小化! (又騙我)

但是經過此一訓練,我終於明瞭一些事,就是刻骨銘心才是硬功夫!!!!!!

答案應該如下:

x1=

0.1948613

x2=

0.9824801

x3=

-0.0092008

x4=

-0.0035009

The value of COV is very close to zero.