نمايش پست تنها
قديمي ۰۲-۸-۱۳۹۲, ۰۱:۳۰ بعد از ظهر   #9 (لینک دائم)
aminjet Male
عضو جدید
 
آواتار aminjet
 
تاريخ عضويت: مهر ۱۳۹۰
پست ها: 3
تشكرها: 0
0 تشكر در 0 پست
پيش فرض

با سلام
در کدهای برنامه شما ابتدا برای هر فاخته یک شعاع تخم گذاری تعیین می کنید.
بعد در درون این شعاع به تعداد تخم هایی که هر فاخته قرار است بگذارد تعدادی شعاع کوچکتر تعیین می کنید که تخم ها را در شعاع بزرگتر به صورت پراکنده بگذارد.
و برای این که در همه آن فضا تخم گذاری پخش شود به جای این که تصادفی تخم گذاری انجام شود برنامه را وادار می کنید که تخم ها را به طور یکسان پخش کند.

سوال من از همین جا آغاز می شود. چرا برای این کار این همه پیچیده و از طریق زاویه و سینوس و کسینوس کار کرده اید؟
فرض کنید مسئله من 10 تا پارامتر دارد. خوب هر پارامتر مثلا پارامتر اول در یک بازه می تواند مقدار بگیرد. وقتی که تخم گذاری انجام می شود یا یک عدد به مقدار قبلی اضافه می شود و یا یک عدد از آن کم می شود که مقدار آن پارامتر برای تخم جدید مشخص شود. خوب این اضافه و کم شدن یک عدد به یکی از پارامتر ها یک کار دو بعدی نیست. لازم نبود که بیاییدبازه 0 تا 2*pi را به تعداد تخم ها به میزان مساوی تقسیم کنید و بقیه ماجرا را انجام دهید. چرا کار زیر را انجام ندادید:

1- ابتدا مثل کد های شما با دستورات زیر برای هر فاخته یک شعاع در نظر می گیریم:

for cuckooNumber = 1:numCuckooS
cuckooPop{cuckooNumber}.eggLayingRadius = cuckooPop{cuckooNumber}.numberOfEggs/summ * ( radiusCoeff * (varHi-varLo) );i
end

ببخشید که بهم میریزد

2- در مرحله دوم ما به جای کار شما برای تعیین شعاع های کچکتر از روش زیر استفاده می کنیم:

for cuckooNumber = 1:numCuckooS
cuckooPop{cuckooNumber}.eggLayingRadiuses = linspace( - cuckooPop{cuckooNumber}.eggLayingRadius , cuckooPop{cuckooNumber}.eggLayingRadius , cuckooPop{cuckooNumber}.numberOfEggs);i
end

در این مرحله من به جای روش شما امده ام بازه منفی R تا مثبت R را به تعداد تخم ها به قسمت مساوی تقسیم کرده ام. همین شعاع ها را به عنوان شعاع تخم گذاری در نظر می گیریم.

3-

for cuckooNumber = 1:numCuckooS
params = cuckooPop{cuckooNumber}.center; % get center values
tmpRadiuses = cuckooPop{cuckooNumber}.eggLayingRadiuses;i
numRadiuses = numel(tmpRadiuses);i
newParams = [];i
for cnt = 1:numRadiuses
newParams = [newParams; params + tmpRadiuses(cnt)];i
end

% check for variable limits
newParams(newParams>varHi) = varHi;i
newParams(newParams<varLo) = varLo;i

cuckooPop{cuckooNumber}.newPosition4Egg = newParams;i
end
aminjet آفلاين است   پاسخ با نقل قول