انجمن سایت کلیدستان



بهینه سازیزمان کنونی: ۱۳۹۵/۰۹/۱۵، ۱۲:۵۵ ب.ظ
کاربران در حال بازدید این موضوع: 1 مهمان
نویسنده: ghazal75
آخرین ارسال: ghazal75
پاسخ 5
بازدید 1903

رتبه موضوع:
  • 1 رای - 3 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
بهینه سازی

بهینه سازی

#1
Photo 
سلام
من یک مجموعه از اعداد تصادفی دارم که تعداد اعضاش هم تصادفی تغییر میکنه  باید کدی بنویسم که اعضایی از این مجموعه رو (که تعداد این اعضا هم معلوم نیست) انتخاب کنه به طوری که جمع اون عددها کمترین فاصله رو از عدد 60 داشته باشه. خواهش میکنم کمکم کنید
پاسخ

بهینه سازی

#2
سلام.
چند پرسش به وجود می آید :
اعداد تصادفی در چه بازه ای قرار داشته باشند ؟
تعداد اعداد تصادفی در چه بازه ای باشد (حداقل و حداکثر تعداد اعداد) ؟

اما در کل، به نظرم بهتر است که هدف نهایی را ذکر کنید، قصد دارید که تعدادی عدد تصادفی داشته باشید که مجموع آنها برابر 60 باشد ؟
 
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ

بهینه سازی

#3
مجموعه زیر مد نظرمه

کد پی‌اچ‌پی:
k=randi([1,95],1,randi([4,20])); 

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

بهینه سازی

#4
کدهای متلب زیر رو می نویسیم :

کد:
clear all
close all
clc

k=randi([1,95],1,randi([4,20]))
k_size=size(k)
total=0;
sum=60;
k_copy=k;
p=1;
choosed=0;
ieration=0;
while (ieration<1000)
    a=1;
    b=k_size(2);
    random=randi([1,k_size(2)]);
    if (k_copy(random)<sum && k_copy(random)~=0)
        sum=sum-k_copy(random);
        choosed(p)=k_copy(random);
        p=p+1;
        k_copy(random)=0;
    end
    ieration=ieration+1;
end
choosed

نتیجه اجرای کدها :

کد:
k =

     8    23    12    18    23    40     5    86    90    47


k_size =

     1    10


choosed =

    23    18    12     5

choosed که در آخر نمایش داده شده است، همان اعداد تصادفی انتخابی می باشد. 

تا اینجا، برنامه ای نوشتیم که به صورت تصادفی، تعدادی از اعداد تصادفی رو انتخاب میکنه که مجموعشان، کمتر از 60 باشد. ولی خوب ما نیاز داریم که بهینه ترین پاسخ را به دست آوریم، بنابراین شما از این کدها استفاده کرده آنها را در یک حلقه for قرار بدهید و 1000 حالت ممکن (یا هر تعداد که فکر می کنید مناسب است) را بسازید و بعد از حلقه for ، هر جوابی که به 60 نزدیکتر باشد، همان جواب بهینه است.
 
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط ghazal75

بهینه سازی

#5
بی نهایت از کمکتون ممنونم
اینجا واقعا کلیدستانه!!!!
پاسخ
 سپاس شده توسط admin


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان

آخرین کلیدهای غیررایگان

شما هم می توانید کلیدهای غیررایگان منتشر کنید (بیشتر بدانید)