সিউডো-এলোমেলোর বিপরীতে আমি কীভাবে "উপভোগযোগ্য" এলোমেলোভাবে উত্পাদন করতে পারি?


26

আমি এমন একটি গেম তৈরি করছি যা বিভিন্ন ধরণের ধাঁধাগুলি ধারাবাহিকভাবে উপস্থাপন করে। আমি প্রতিটি ধাঁধাটি সিউডোরেন্ডম সংখ্যার সাথে বেছে নিই। প্রতিটি ধাঁধা জন্য, বিভিন্ন ধরণের আছে। আমি অন্য সিউডোরেন্ডম সংখ্যার সাথে তারতম্যটি বেছে নিই। ইত্যাদি।

জিনিসটি হ'ল এটি যখন সত্য-কাছাকাছি এলোমেলোতা তৈরি করে, খেলোয়াড় সত্যই এটি চায় wants প্লেয়ারটি সাধারণত যা তারা বোঝে এবং এলোমেলো হিসাবে চিহ্নিত করতে চায় তা কেবলমাত্র যদি ধাঁধাটি পুনরাবৃত্তি না করে তবেই। সুতরাং, সত্যিই এলোমেলো নয়। শুধু অনির্দেশ্য।

কিছুটা চিন্তাভাবনা করা, আমি এটি করার হ্যাকি উপায়গুলি কল্পনা করতে পারি। উদাহরণস্বরূপ, কোনও নতুন পছন্দ নির্বাচন করার সময় সাম্প্রতিকভাবে সম্ভাব্যতার সেট থেকে সাম্প্রতিকতম এন পছন্দগুলি অপসারণ করা। বা প্রতিটি পছন্দকে সমান সম্ভাবনা নির্ধারণ, নির্বাচনের নির্বাচনের সম্ভাবনা শূন্যে হ্রাস করা এবং তারপরে প্রতিটি নির্বাচনের সাথে ধীরে ধীরে সমস্ত সম্ভাবনা বাড়ানো।

আমি ধরে নিলাম এটি করার একটি প্রতিষ্ঠিত উপায় আছে তবে আমি কেবল এটির পরিভাষা জানি না তাই এটি খুঁজে পাচ্ছি না। কেউ জানেন? বা কেউ এটি একটি আনন্দদায়ক উপায়ে সমাধান করেছেন?


4
"এআই গেম প্রোগ্রামিং উইজডম 2" বইটিতে ফিল্টার করা এলোমেলোতার উপর একটি অধ্যায় রয়েছে যা আমি যা মনে করি তা থেকে ঠিক আপনি যা খুঁজছেন তা ঠিক। যদিও আমি সত্যিই আপনাকে পুরো উত্তর দিতে পারি না যদিও এই মুহূর্তে আমার তা নেই।
আন্তন

চেষ্টা ও স্পষ্ট করার জন্য: যখন আপনি 'পুনরায় ধাঁধা না বলুন' বলছেন তখন আপনার অর্থ কি আপনি একে অপরের পাশে একই ধরণের দুটি ধাঁধা চান না? সুতরাং অন্য কথায়, যদি আপনি কেবল একটি সুডোকু বাছাই করেন, অন্য একটি সুডোকু ধাঁধাটি উপস্থাপন করবেন না, তবে এটি যদি সুডোকু # 19 হয়, তবে পিক্রস # 19 পরবর্তী দেওয়া ঠিক আছে (অন্য কথায়, তারতম্যের সংখ্যাটি কোনও ব্যাপার নয়) ?
স্টিভেন স্টাডনিকি


1
ঠিক আছে, আমার এআই গেম প্রোগ্রামিং উইজডম 2 এর অনুলিপিটি এসেছিল। আমি ফিল্টার করা এলোমেলো উপর অধ্যায়টি পড়েছি এবং উত্স কোডটি দেখেছি। এটি সম্ভবত সেরা পন্থা। এটি আমাকে কেবল এলোমেলো সংখ্যা ব্যবহার করার অনুমতি দেয় তবে তারপরে সংখ্যাগুলি ফিল্টার করে যাতে অপ্রত্যাশিত নিদর্শনগুলি না ঘটে। এলোমেলো ব্যাগের চেয়ে বুলেট প্রুফ মনে হয়।
হিলটন ক্যাম্পবেল

1
তবুও আরেকটি আপডেট ... আমার নির্দিষ্ট অ্যাপ্লিকেশনটির জন্য, ফিল্টার করা এলোমেলোভাবে এটি বেশিরভাগভাবে করেনি। আমি সত্যিই চাই খেলোয়াড় পুনরাবৃত্তি করার আগে সমস্ত ধরণের এবং সাব টাইপগুলির মধ্যে দিয়ে খেলুক, তাই আমি একটি ব্যাগ ব্যাগ নিয়ে গেলাম।
হিল্টন ক্যাম্পবেল

উত্তর:


25

আপনার যদি সীমাবদ্ধ সংখ্যার ধাঁধা থাকে তবে আপনি এটি করতে পারেন:

  • ধাঁধাগুলির একটি তালিকা তৈরি করুন, সেগুলি সবই বা কিছু এলোমেলোভাবে বাছাই করা;
  • এই তালিকাটি পরিবর্তন করুন ( উদাহরণস্বরূপ নুথ শ্যাফেল দেখুন );
  • আপনার তালিকায় এই প্লেয়ার খেলুন;
  • তালিকাটি খালি থাকলে একটি নতুন দিয়ে শুরু করুন।

সম্পাদনা

আমি এটি জানতাম না, তবে এসই ব্রাউজ করা আমাকে বুঝতে পেরেছিল যে এটি আসলে "শফল ব্যাগ" হিসাবে পরিচিত। আরও কিছু ইনফোগুলি এখানে , এখানে বা সেখানে

সম্পাদনা 2

ক্লাসিক নুথ সাফেল এই পথে চলেছে:

To shuffle an array a of n elements (indices 0..n-1):
    for i from n  1 down to 1 do
        j  random integer with 0  j  i
        exchange a[j] and a[i]

স্টিভেন স্টাডনিকি তার মন্তব্যে যথাযথভাবে উল্লেখ করেছেন যে এই ধরণের জিনিস পুনর্বিবেচনার পুনরাবৃত্তি আটকাতে পারে না। এটিকে আমলে নেওয়ার একটি উপায় হল শেষ আইটেমটির জন্য একটি বিশেষ কেস যুক্ত করা:

To reshuffle an array a of n elements and prevent repetitions (indices 0..n-1):
    return if n <= 2

    // Classic Knuth Shuffle for all items *except* the last one
    for i from n  2 down to 1 do
        j  random integer with 0  j  i
        exchange a[j] and a[i]

    // Special case for the last item
    // Exchange it with an item which is *not* the first one
    r  random integer with 1  r  n - 1
    exchange a[r] and a[n - 1]

1
এটি কাজ করতে পারে তবে আপনি প্রতিটি খেলাধুলার পরে পরিবর্তন করেছেন একই আইটেমটি শুরু না করার জন্য যদি আপনি রদবদল করেন তবে আপনাকে কিছুটা সতর্ক থাকতে হবে।
স্টিভেন স্টাডনিকি

পছন্দ করেছেন এই আইটেমটি নতুন তালিকা থেকে বাদ দেওয়া যেতে পারে। আসলে, কেবল কয়েকটি এলোমেলো আইটেমের একটি তালিকা তৈরি করা এবং কেবলমাত্র অবশিষ্ট আইটেমগুলি সহ পরবর্তী তালিকাটি তৈরি করা ধারণা হতে পারে। সুতরাং আপনার যদি 100 টি আইটেম থাকে তবে উদাহরণস্বরূপ 10 টির একটি শ্যাফলেড তালিকা তৈরি করুন this এই তালিকাটি সম্পন্ন করার পরে, 90 টিতে 10 টি আইটেম তৈরি করুন যা আগে বাছাই করা হয়নি।
লরেন্ট কুইভিডু

+1 টি। এই কৌশলটি "আরও মজাদার" হওয়ার জন্য যোগ করা সহায়তা: উদাহরণস্বরূপ, টেট্রিস "এলোমেলো" টুকরো উত্পাদন করে। প্রতিটি টুকরোটির একটির সেটকে বদলে দেওয়া এবং পুনরাবৃত্তি করা হয় যা ডুপ্লিকেটের দীর্ঘ ক্রমগুলি এড়িয়ে যায় যে সত্য র্যান্ডমটি অনিবার্যভাবে উত্পাদন করতে পারে।
কুতুলু মাইক

1
@ হিল্টন আমি এ ধরণের "অপছন্দ করি, যতক্ষণ না এলোমেলো আমাকে এলোমেলো করে দেয় যতক্ষণ না" আমার কাছে যা চাই "পদ্ধতির ... খুব সম্ভবত নয় যে এটি কোনও সমস্যা সৃষ্টি করবে। তবে তবুও, আমি সর্বদা মনে করি এটি এলোমেলো অসীম লুপগুলি বা পারফরম্যান্স ড্রপের জন্য কল which যা ডিবাগ করার জন্য ভয়াবহ। নতুন তালিকা থেকে পূর্বের তালিকার শেষ আইটেমটি বাদ দিলে একই ফলাফলের জন্য আপনাকে কেবল একবার পরিবর্তন করতে দেয়।
লরেন্ট কুইভিডউ

1
আপনি ঠিক বলেছেন, এবং আমারও একই সংরক্ষণ ছিল। আগের শেষ আইটেমটি বাদ দেওয়ার পরিবর্তে আমার এখন এটি একবারে বদলে গেছে এবং এরপরে যদি আগের শেষ আইটেমটি এখন প্রথম হয়, আমি এলোমেলোভাবে অন্য কিছু আইটেমের সাথে এটিকে অদলবদল করব।
হিলটন ক্যাম্পবেল

2

লরানকউর পদ্ধতির একটি বৈকল্পিক: প্রতিটি ধাঁধা ধরণের জন্য, ধাঁধা সংখ্যা (অ্যারেঞ্জড) রাখুন; তারপরে প্রতিবার আপনি যখন ধরণের ধাঁধাটি আঘাত করেন, তার পরের নম্বরটি তালিকায় রাখুন। উদাহরণস্বরূপ, আসুন ধরা যাক আপনার কাছে সুডোকু, পিক্রস এবং কেনকেন ধাঁধা, প্রতিটি ধাঁধা # 1..6 রয়েছে। আপনি প্রতিটি ধাঁধা টাইপের জন্য একটি ১..6 সংখ্যার তিনটি বদলানো অ্যারে তৈরি করতে চান:

  • সুডোকু: [5, 6, 1, 3, 4, 2]
  • পিক্রস: [6, 2, 4, 1, 3, 5]
  • কেনকেন: [3, 2, 5, 6, 4, 1]

এখন, আপনি লরানকুর পরামর্শ মতো ধাঁধা ধরণের পরিবর্তন করতে চান; আসুন বলি এটি আসবে [পিক্রস, সুডোকু, কেনকেন]। তারপরে প্রতিবার আপনি যখন কোনও প্রদত্ত ধরণের ধাঁধাটি আঘাত করেন, তার পরবর্তী নম্বরটি তার 'শিফেল তালিকায়' ব্যবহার করুন; সামগ্রিকভাবে আপনার ধাঁধা উপস্থাপনাটি হবে [সুডোকু # 5, পিক্রস # 6, কেনকেন # 3, সুডোকু # 6, পিক্রস # 2, কেনকেন # 2, ...]

আপনি যদি লুপের মাধ্যমে প্রতিবার একই সামগ্রিক ক্রমে ধাঁধাটি রাখতে চান না, তবে আমি মনে করি আপনার 'এলোমেলোভাবে বেছে নিন, শেষ কয়েকটি বেছে বেছে উপেক্ষা করুন' বিকল্পটি সেরা। আপনি এটিকে আরও কিছুটা দক্ষ করে তোলার উপায় রয়েছে; উদাহরণস্বরূপ, ধরা যাক যে আপনার কাছে 20 টি জিনিস রয়েছে এবং আপনি সর্বশেষ 5 টি বেছে নেওয়া উপেক্ষা করতে চান। তারপরে আপনি এলোমেলোভাবে একটি সংখ্যা বেছে নেওয়ার পরিবর্তে ১.২০ এবং 'পুনরায় তালিকাভুক্ত' হওয়া অবধি আপনি শেষ ৫ এর বাইরে একটি পেয়ে যান, পরিবর্তে কেবল একটি নম্বর বেছে নিন 1..15 এবং আপনার ধাঁধা ধরণের বিভিন্ন পদক্ষেপের মধ্য দিয়ে চলুন, যে কোনও ধরণের ধাঁধা ছাড়াই বাছাই করা হয়েছে (আপনি সর্বশেষ 5 বাছাইকৃত ধাঁধাটি ধারণ করে এমন কিছু অ্যারে রেখে সহজেই এটি করতে পারেন)।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.