نمایش نتایج 1 تا 12 از 12

نام تاپیک: تصحیح کد تولید اعداد تصادفی غیر تکراری

  1. #1

    Smile تصحیح کد تولید اعداد تصادفی غیر تکراری

    با سلام
    با استفاده از کد زیر اعداد تصادفی تولید می شه ولی بعضی از این اعداد تکراری هستند لطفا کمک کنید و بگید که چه قسمتی رو به این کد اضافه کنم تا اعداد تکراری تولید نکند؟
    int i;
    int[] myIntArray = new int[100];

    Random autoRand = new Random();
    string randomString = "";
    for (i = 0; i < 20; i++)
    {
    myIntArray[i] = System.Convert.ToInt32(autoRand.Next(1, 100));
    randomString = (myIntArray[i].ToString());
    ListBox1.Items.Add(randomString);
    }

  2. #2

    نقل قول: تصحیح کد تولید اعداد تصادفی غیر تکراری

    List<int> numbers = new List<int>();
    //ye list az adada ro megdar dehi avvaliye mikonim ba magadirike mikhgayn az beyneshun entekhab konim
    for (int i = 1; i <= 100; i++)
    {
    numbers.Add(i);
    }

    List<int> randoms = new List<int>();
    for (int i = 0; i < 20; i++)
    {
    Random rand = new Random();
    //yek add tasadofi az 0 ta tool araye bedast miyarim va az arrayeye numbers moadele adadiye un ro migirim
    int randNum = numbers[rand.Next(0, numbers.Count - 1)];
    randoms.Add(randNum);
    //add estefade shode ro az arraye hazf mikonim ta dobare entekhab nashe
    numbers.Remove(randNum);
    }

  3. #3

    نقل قول: تصحیح کد تولید اعداد تصادفی غیر تکراری

    نقل قول نوشته شده توسط exlord مشاهده تاپیک
    List<int> numbers = new List<int>();
    //ye list az adada ro megdar dehi avvaliye mikonim ba magadirike mikhgayn az beyneshun entekhab konim
    for (int i = 1; i <= 100; i++)
    {
    numbers.Add(i);
    }

    List<int> randoms = new List<int>();
    for (int i = 0; i < 20; i++)
    {
    Random rand = new Random();
    //yek add tasadofi az 0 ta tool araye bedast miyarim va az arrayeye numbers moadele adadiye un ro migirim
    int randNum = numbers[rand.Next(0, numbers.Count - 1)];
    randoms.Add(randNum);
    //add estefade shode ro az arraye hazf mikonim ta dobare entekhab nashe
    numbers.Remove(randNum);
    }
    دوست عزیز بابت کمکتون ممنون ولی در قسمت Count1 و سایر قسمتها error میده اگه میشه لطف کنید بگید که چطوری کد خودم رو تغییر بدم

  4. #4

    نقل قول: تصحیح کد تولید اعداد تصادفی غیر تکراری

    دوستان لطفا اگه در این مورد اطلاعی دارید کمک کنید

  5. #5
    کاربر دائمی آواتار #aliyari_C
    تاریخ عضویت
    بهمن 1387
    محل زندگی
    همین نزدیکی
    پست
    200

    نقل قول: تصحیح کد تولید اعداد تصادفی غیر تکراری

    سلام
    با جستجو ساده(EN) (با اینکه زبان خودم افتضاح) در google این را پیدا کردم
    اول نوشتن تابع

    /// <summary>
    /// Returns all numbers, between min and max inclusive, once in a random sequence.
    /// </summary>
    static IEnumerable<int> UniqueRandom(int minInclusive, int maxInclusive)
    {
    List<int> candidates = new List<int>();
    for (int i = minInclusive; i <= maxInclusive; i++)
    {
    candidates.Add(i);
    }
    Random rnd = new Random();
    while (candidates.Count > 0)
    {
    int index = rnd.Next(candidates.Count);
    yield return candidates[index];
    candidates.RemoveAt(index);
    }
    }

    بعد به کار گیری آن

    Console.WriteLine("All numbers between 0 and 20 in random order:");
    foreach (int i in UniqueRandom(0, 20)) {
    Console.WriteLine(i);
    }


    منبع:http://stackoverflow.com/questions/1...andom-number-c
    موفق باشی
    __________________________________________________ __________________________________________________
    چون به دریا می توانی راه یافت
    سوی یک قطره چرا باید شتافـت


    نتایج آماری,مقایسه ای بین String و StringBuildr

  6. #6
    کاربر دائمی آواتار #aliyari_C
    تاریخ عضویت
    بهمن 1387
    محل زندگی
    همین نزدیکی
    پست
    200

    نقل قول: تصحیح کد تولید اعداد تصادفی غیر تکراری

    سلام
    همیشه سعی کردم دنبال راحترین و جالب ترین راه باشم.....بعضی موقعها به نتیجه نمی رسیم ......بعضی موقعها هم به نتیجه می رسیم.

    var i = Enumerable.Range(1, 30).OrderBy(g => Guid.NewGuid()).ToArray();
    StringBuilder sb = new StringBuilder();
    foreach (var item in i)
    {
    sb.Append(item.ToString());
    }
    MessageBox.Show(sb.ToString());

  7. #7
    کاربر دائمی آواتار shask00l
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    روی پاهای خودم
    سن
    38
    پست
    387

    نقل قول: تصحیح کد تولید اعداد تصادفی غیر تکراری

    در تمامی روش های فوق از تابع rnd خود vs استفاده شده . و برای غیر تکراری بودن هر بار عدد رو چک می کنه.

    روش بهتری هم هست . استفاده از توابع آشوب . logistic map رو سرچ کنید . این تابع توی رنج (فکر کنم) 0 تا 1 به نوسان در میاد و خاصیتش هم اینه میتونه بینهایت عدد random غیر تکراری تولید کنه . اگه توضیح بیشتر خواستین بگین .(چون خودمم یادم رفته . باید بین فایلام بگردم)

  8. #8
    کاربر دائمی
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    ایران
    سن
    39
    پست
    467

    نقل قول: تصحیح کد تولید اعداد تصادفی غیر تکراری

    نقل قول نوشته شده توسط shask00l مشاهده تاپیک
    در تمامی روش های فوق از تابع rnd خود vs استفاده شده . و برای غیر تکراری بودن هر بار عدد رو چک می کنه.

    روش بهتری هم هست . استفاده از توابع آشوب . logistic map رو سرچ کنید . این تابع توی رنج (فکر کنم) 0 تا 1 به نوسان در میاد و خاصیتش هم اینه میتونه بینهایت عدد random غیر تکراری تولید کنه . اگه توضیح بیشتر خواستین بگین .(چون خودمم یادم رفته . باید بین فایلام بگردم)
    دوست عزیز میشه لطف کنید و یکم توضیح دهید؟
    من در مورد خود مساله آشوب و اثر پروانه ای تحقیق کردم ولی نتونستم الگوریتمی براش درست کنم
    اگه راهنمائی کنید ممنون می شم.
    من نیاز به اعداد تصادفی دارم که اگه تکراری بود هم عیبی نداره ولی نه اینکه کل اعداد تقریبا مثل هم باشند
    تابع رندم دات نت بیشتر مواقع اعداد عین هم تولید می کنه
    من در مسئله الگوریتم ژنتیک نیاز به اعداد تصادفی داشتم که در هنگام تریس خط به خط اعداد متفاوت ولی در اجرای یکباره نرم افزار اعداد کاملا شبیه هم تولید می شد(با استفاده ار یک مسیج باکس و نمایش اعداد تولید شده تونستم بفهمم)
    برای حل این مشکل به thread.sleep متوسل شدم ولی باز هم خیلی وقت ها اعداد شبیه هم بودند
    الان بعد از مطالعه نظریه آقای لورنز می خوام روش تولید اعداد تصادفی رو عوض کنم
    ولی الگوریتمی نتونستم پیدا کنم

  9. #9

    نقل قول: تصحیح کد تولید اعداد تصادفی غیر تکراری

    سلام
    شاید یه کم مسخره باشه ولی .....

    بعد از اینکه عدد تصادفی رو تولید کر دی بنویس


    for (int i=0;i< 10000000; i++);

    اینطوری یه pause تولید می شه


  10. #10
    کاربر دائمی آواتار shask00l
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    روی پاهای خودم
    سن
    38
    پست
    387

    نقل قول: تصحیح کد تولید اعداد تصادفی غیر تکراری

    نقل قول نوشته شده توسط hojjatshariffam مشاهده تاپیک
    دوست عزیز میشه لطف کنید و یکم توضیح دهید؟
    فرمولش اینجوریه :


    p(1)=(0-1)
    r= 3.9999
    p(n+1)=r * p(n) * (1-p(n))


    عدد شروع p(1) باید بین 0 و 1 باشه .. مثلا 0.3 . این فرمول از اعداد بدسا اومده توی مرحله قبلی برای تولید عدد جدید استفاده میکنه . r ثابته . ضمنا . ورودی این فرمول p(1) رو از طریق رندوم خود دات نت حساب کنید.

    ضمنا . برای ژنتیک همون sleep جواب میده .

  11. #11
    کاربر دائمی
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    ایران
    سن
    39
    پست
    467

    نقل قول: تصحیح کد تولید اعداد تصادفی غیر تکراری

    نقل قول نوشته شده توسط quantomquery مشاهده تاپیک
    سلام
    شاید یه کم مسخره باشه ولی .....

    بعد از اینکه عدد تصادفی رو تولید کر دی بنویس


    for (int i=0;i< 10000000; i++);
    اینطوری یه pause تولید می شه

    چه کاری دوست من
    به جاش از Thread.Sleep استفاده می کنیم
    ضمنا فکر کنم دات نت برای گذر از یک for بدون دستور که فقط وقت تلف می کنه راه حل داره و فقط اولین بار این زمان رو صرف می کنه و دفعات بعدی همین طور ازش میگزره
    اینو تجربی فهمیدم و هیچ جایی نخوندم واسه همین مطمئن نیستم ولی فکر کنم فقط یه بار زمان صرف می کنه


    نقل قول نوشته شده توسط shask00l مشاهده تاپیک
    فرمولش اینجوریه :


    p(1)=(0-1)
    r= 3.9999
    p(n+1)=r * p(n) * (1-p(n))
    عدد شروع p(1) باید بین 0 و 1 باشه .. مثلا 0.3 . این فرمول از اعداد بدسا اومده توی مرحله قبلی برای تولید عدد جدید استفاده میکنه . r ثابته . ضمنا . ورودی این فرمول p(1) رو از طریق رندوم خود دات نت حساب کنید.

    ضمنا . برای ژنتیک همون sleep جواب میده .
    ممنون دوست من
    پس باید یه کلاس درست کنم که توش دو متغیر استاتیک برای n و یکی برای P(n) داشته باشه که مقادیر دفعات قبل رو نگه داره و P(1) هم در کانسترکتور توسط Random تولید کنم
    درسته؟

  12. #12
    کاربر دائمی آواتار shask00l
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    روی پاهای خودم
    سن
    38
    پست
    387

    نقل قول: تصحیح کد تولید اعداد تصادفی غیر تکراری

    به این تابع دقت کن ...

    void fill_first_gen()
    {
    float r=3.9999;
    float x1=0.99,
    x2=r*x1*(1-x1);
    int cnd1,exists;

    for(int i=0;i<gnr_count;i++)
    {
    for(int j=0;j<node-1;j++)
    {
    if(j<node-1) cnd1=1;
    while(cnd1)
    {
    int tmp=floor(x1*node-1)+1;
    exists=0;
    for(int k=0;k<node-1;k++)
    if(gnr[i][k]==tmp) exists=1;
    if(!exists)
    {
    gnr[i][j]=tmp;
    cnd1=0;
    }
    else
    {
    x1=x2;
    x2=r*x1*(1-x1);
    }
    }
    }
    }


    اینو برای تولید نسل اولیه توی tsp نوشته بودم . البته با c . مرحله به مرحله با پیشرفت حلقه تابع آشوب هم پیشرفت میکنه . حواست باشه . اعدادی که این تابع تولید میکنه همه توی محدوده 0 تا 1 هستن . برای انتقال این مجموعه به یک مقیاس بالاتر مثلا اعداد 0 تا 1000 این آرایه رو در 1000 ضرب کن. نکته ی بعدی در مورد این مجموعه اینه که اعداد تولید شده غیر تکراری هستند ولی وقتی توی مقیاس بالاتر ازشون جزء صحیح بگیری ممکنه عدد تکراری توشون پیدا بشه . البته زیاد پیش نمیاد ولی حواست باشه . اگه کمک خواستی در خدمتیم .

    پ.ن : یه نکته ی دیگه . اینو که به استادم نشون دادم بهم گفت که با خود رندوم هم میشه این کارو انجام داد ولی نه با روش عمومی که همه استفاده میکنن . در حالت عادی همه تلاش میکنند که مقادیر ژن ها رو با خروجی رندوم پر کنند . این کار خیلی وقت گیره (به دلیل وجود اعداد تکراری) . روشی که استادم پیشنهاد داده بود این بود که :
    یک آرایه تعریف میکنیم با طول مثلا n که هر اندیس اون با عدد مربوط به شماره اندیس پر شده. طول این آرایه رو توی یه متغییر قرار میدیم . بعد یک عدد رندوم از صفر تا اون متغییر انتخاب می کنیم . عددی که داخل اون اندیس قرار داره رو بعنوان ژن استخراج کرده و متغییری که طول آرایه توش ذخیره بود یک رقم کم می کنیم و تمام اعداد باقیمانده بعد از عدد استخراج شده رو یک بار به چپ شیفت میدیم . این حلقه تا جایی تکرار میشه که آرایه خالی بشه .
    توی این روش از رندوم استفاده شده ولی با یک تکنیک ساده سرعتشو بالا بردیم و ژن تکراری هم استخراج نمیشه . در بدترین حالت فرض کن تابع رندوم دوتا عدد یکسان پشت سر هم بده . چون ما با اندیس آرایه کار داریم و عناصر آرایه هم شیفت داده شدن بنابراین مشکلی ایجاد نمیشه و کروموزوم هامون همیشه معتبره . حتی اگه تابع رندوم تمام خروجیهاشو تکراری بده .
    موفق باشید
    آخرین ویرایش به وسیله shask00l : جمعه 10 دی 1389 در 20:44 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •