PDA

View Full Version : سوال: هوش مصنوعی



maryam-alikahakii
یک شنبه 13 اردیبهشت 1388, 15:36 عصر
با سلام
من میخواهم مقدار بهینه یک تابع (f(n)) را با زبان برنامه نویسی cياc#
و الگوریتم ژنتیک پیدا کنم هر کسی میدونه لطفا زود جواب بده

golbafan
دوشنبه 14 اردیبهشت 1388, 20:01 عصر
با سلام من یک سری کد با دلفی نوشتم البته این تابع 3 تا متغیر داره ولی میتونید اونو تعمیم بدید دمو را هم براتون میفرستم
منوی data\golbafan\full analysis


تابع مورد نظر
function golweler(b0,b1,b2,t:DOUBLE):DOUBLE;
begin
if t>b0 then
result:=(-(b2*exp((b0-t)/b1))/(-b1+b2)+(b2*exp((b0-t)/b2))/(-b1+b2)+(exp((b0-t)/b1)*(b0-t))/b1)/(-b1+b2)
else
Result:=0;
end;


محاسبه مقدار فیت شدن
function sumsqr(a1,a2:array of DOUBLE; n:integer):DOUBLE;
var u:integer;
r:DOUBLE;
begin
r:=0;
for u:=0 to n-1 do
r:=r+power((a1[u]-a2[u]),2);
Result:=r;
end;

procedure TForm1.Weler1Click(Sender: TObject); بهیده سازی و مینیمم کردن فیت شدن
var ax,ay,af:array of DOUBLE;
i,n,k:integer;
b0,b1,b2,b0c,b1c,b2c,f,l,ss,ss2,dd:DOUBLE;
bb01,bb11,bb21,bb02,bb12,bb22,bbt:Boolean;
Elapsed:dword;

begin
مقادیر شروع وپایان استپ
f:=strtofloat( LabeledEdit20.Text);
l:=strtofloat( LabeledEdit21.Text);
//////////////////////////////////
k:=0;
for i:=1 to ClientDataSet11.RecordCount do
begin
ClientDataSet11.RecNo:=i;
if ClientDataSet11y.Value>0 then
k:=k+1;
end;
SetLength(ax,k);
SetLength(ay,k);
SetLength(af,k);
k:=0;
for i:=1 to ClientDataSet11.RecordCount do
begin
ClientDataSet11.RecNo:=i;
if ClientDataSet11y.Value>0 then
begin
k:=k+1;
ax[k-1]:= ClientDataSet11x.Value;
ay[k-1]:= ClientDataSet11rtd.Value;
end;
end;
dd:=strtofloat( LabeledEdit24.Text);
if dd<=1 then dd:=1.5;

//////////////////////////////////
تعریف اولیه پارامترها
b0:=strtofloat( LabeledEdit1.Text);
b1:=strtofloat( LabeledEdit2.Text);
b2:=strtofloat( LabeledEdit3.Text);
for i:=1 to k do
بدست اوردن اولیه مقدار فیتنس
af[i-1]:= golweler(b0,b1,b2,ax[i-1]);
ss:= sumsqr(ay,af,k);
//////////////////////////////////
n:=0;
Elapsed:=GetTickCount();

تغییر پارامتر ها بر حسب استپ فعلال و محاسبه مقدار فیت شدن

repeat
repeat
n:=n+1;
bbt:=false;
//////////////////////////////////////////////// اولین پارامتر
repeat
b0c:=b0+f;
for i:=1 to k do
af[i-1]:= golweler(b0c,b1,b2,ax[i-1]);
ss2:= sumsqr(ay,af,k);
if ss2<ss then begin b0:=b0c; bb01:=true; ss:=ss2; bbt:=true; end else bb01:=false;
until(bb01=false);

repeat
if b0-f>=0 then
b0c:=b0-f;
for i:=1 to k do
af[i-1]:= golweler(b0c,b1,b2,ax[i-1]);
ss2:= sumsqr(ay,af,k);
if ss2<ss then begin b0:=b0c; bb02:=true; ss:=ss2; bbt:=true; end else bb02:=false;
until(bb02=false);
/////////////////////// دومین
repeat
b1c:=b1+f;
for i:=1 to k do
af[i-1]:= golweler(b0,b1c,b2,ax[i-1]);
ss2:= sumsqr(ay,af,k);
if ss2<ss then begin b1:=b1c; bb11:=true; ss:=ss2; bbt:=true; end else bb11:=false;
until(bb11=false);

repeat
if b1-f>0 then
b1c:=b1-f;
for i:=1 to k do
af[i-1]:= golweler(b0,b1c,b2,ax[i-1]);
ss2:= sumsqr(ay,af,k);
if ss2<ss then begin b1:=b1c; bb12:=true; ss:=ss2; bbt:=true; end else bb12:=false;
until(bb12=false);
////////////////////// سومین
repeat
b2c:=b2+f;
for i:=1 to k do
af[i-1]:= golweler(b0,b1,b2c,ax[i-1]);
ss2:= sumsqr(ay,af,k);
if ss2<ss then begin b2:=b2c; bb21:=true; ss:=ss2; bbt:=true; end else bb21:=false;
until(bb21=false);

repeat
b2c:=b2-f;
for i:=1 to k do
af[i-1]:= golweler(b0,b1,b2c,ax[i-1]);
ss2:= sumsqr(ay,af,k);
if ss2<ss then begin b2:=b2c; bb22:=true; ss:=ss2; bbt:=true; end else bb22:=false;
until(bb22=false);
///////////////
until((bbt=false)or(n>SpinEdit1.Value));
f:=f/dd;
until(F<L);
Elapsed:=GetTickCount-elapsed;
LabeledEdit19.Text:=floattostr(Elapsed/1000);
LabeledEdit1.Text:=FormatFloat('0.00000',b0);
LabeledEdit2.Text:=FormatFloat('0.00000',b1);
LabeledEdit3.Text:=FormatFloat('0.00000',b2);
LabeledEdit17.Text:=inttostr(n);
LabeledEdit18.Text:='GGA FIT !!!';
Button1.Click;
end;

golbafan
دوشنبه 14 اردیبهشت 1388, 20:15 عصر
از این لینک دانلود کنید:
http://rapidshare.com/files/229087401/rtd2009.rar.html

golbafan
دوشنبه 14 اردیبهشت 1388, 20:35 عصر
سلام
3 تا فایل به عنوان مثال هست که بعد از باز کردن باید اول از data\calc-rtd استفاده کنید و سپس full analysis را بزنید. این نرم افزار برای محاسبه زمان ماند در راکتورها مفید است.

maryam-alikahakii
چهارشنبه 16 اردیبهشت 1388, 11:17 صبح
ميشه در مورد اون برنامه که نوشتيد توضيح دهيد(با زبان c يا c#اگر امکان دارد . ممنون)

golbafan
شنبه 19 اردیبهشت 1388, 18:41 عصر
همونطور که دیدید با دلفی نوشته شده
منظورتون رو واضحتر بگید

maryam-alikahakii
یک شنبه 20 اردیبهشت 1388, 00:17 صبح
چون با زبان دلفی اشنا نیستم میخواستم در مورد الگوریتم برنامه توضیح بدید تا بازبان دیگه ای بنویسم.
ممنون

bahar maleki
دوشنبه 21 اردیبهشت 1388, 11:52 صبح
سلام
می خواستم بپرسم شما در مورد روش آنالیز ابزار پایانی همراه با مثال یا روشstrip یا روشscript
به من کمک کنید
سایتی هست که بشه این اطلاعات را بدست اورد یا شما الگوریتمی در این زمینه ها ندارید

ardalan_off
پنج شنبه 24 اردیبهشت 1388, 23:50 عصر
سلام به خاطر این کد ازتون ممنون
ببخشید میتونید در مورد کد الگوریتم sma*کمکم کنید ممنون مشم
با زبان سی شارپ
مرسی

golbafan
یک شنبه 27 اردیبهشت 1388, 12:48 عصر
چون با زبان دلفی اشنا نیستم میخواستم در مورد الگوریتم برنامه توضیح بدید تا بازبان دیگه ای بنویسم.
ممنون


شرمنده من متخصص دلفی هستم

با این حال الگوریتم کلی اینه که با تغییر دادن پارامتر های یک تابع و سپس بدست آوردن sumsqr میزان فیت شدن را بررسی میکنیم و اگر خوب بود تغییر را برای پارامتر میپذیریم

منتها روش تغییر دادن این پارامتر ها مهمترین نکته این سری الگوریتم ها است که الگوریتم من یک پارامتر دیگر نیز دارد و آن تغییر دادن استپ میباشد به این صورت که ابتدا استپها بزرگ هستند و sumsqr از چاله های بزرگ عبور میکند و رفته رقته استپها کوچک میشوند

کدی که براتون فرستادم را یک بار دیگر ببینید