অনুমানযোগ্য র্যান্ডম জেনারেটরের প্রয়োজন


151

আমি একটি ওয়েব-গেম ডেভেলপার এবং এলোমেলো সংখ্যায় আমার সমস্যা হয়েছিল। ধরা যাক যে কোনও খেলোয়াড়ের তরোয়াল দিয়ে সমালোচনামূলক আঘাত পাওয়ার 20% সুযোগ রয়েছে। তার মানে, 5 টির মধ্যে 1 টি হিট সমালোচনা করা উচিত। সমস্যাটি হ'ল আমি খুব খারাপ বাস্তব জীবনের ফলাফল পেয়েছি - কখনও কখনও খেলোয়াড়রা 5 টি হিটগুলিতে 3 সমালোচক পায়, কখনও কখনও 15 হিটগুলিতে কোনও হয় না। যুদ্ধগুলি বরং সংক্ষিপ্ত (3-10 হিট) তাই ভাল এলোমেলো বিতরণ পাওয়ার জন্য এটি গুরুত্বপূর্ণ।

বর্তমানে আমি পিএইচপি ব্যবহার করি mt_rand()তবে আমরা কেবল আমাদের কোডটি সি ++ এ সরিয়ে দিচ্ছি, তাই আমি আমাদের গেমের নতুন ইঞ্জিনে এই সমস্যাটি সমাধান করতে চাই।

আমি জানি না যে সমাধানটি কিছু অভিন্ন র্যান্ডম জেনারেটর, বা সম্ভবত পূর্ববর্তী এলোমেলো রাষ্ট্রগুলি সঠিক বিতরণে বাধ্য করার জন্য মনে রাখতে পারে।


58
সত্যিকারের এলোমেলো সংখ্যা ধরে ধরে নিখুঁত 3 সমালোচক হিট এবং 2 অ-সমালোচক এবং প্রায় একটানা 15 অ-সমালোচক হিট হওয়ার 3.5% সম্ভাবনা রয়েছে।
নিক্সুজ

10
উপরে +1 থেকে উপরে। এলোমেলো সংখ্যার একটি বৈশিষ্ট্য হ'ল আপনি বিদেশী হন।
কনসার্নড

44
@ নিক্সাস: না, এটি 3 সমালোচকদের হিট এবং 2 অ-সমালোচকদের প্রায় 5% সম্ভাবনা, আপনি (5! / (3! * 2!)) = 10 দিয়ে গুণতে ভুলে যাচ্ছেন 5 টি স্ট্রাইকগুলিতে 3 সমালোচনামূলক হিটগুলির পরিসংখ্যানগতভাবে অসম্ভব।
এরিক্ক্যালেন

7
প্রথমে আমি ভেবেছিলাম এটি একটি নির্বোধ প্রশ্ন ... আবারও, আমি এসও দ্বারা নম্র হয়েছি।
সার্জিওল

উত্তর:


39

আমি পূর্ববর্তী উত্তরের সাথে একমত যে কিছু গেমের ছোট রানে আসল এলোমেলোতা অবাঞ্ছিত - এটি কিছু ব্যবহারের ক্ষেত্রে খুব অন্যায় বলে মনে হয় না।

আমি রুবিতে প্রয়োগের মতো একটি সাধারণ শ্যাফেল ব্যাগ লিখেছিলাম এবং কিছু পরীক্ষাও করেছি। বাস্তবায়ন এটি করেছে:

  • যদি এখনও এটি ন্যায্য মনে হয় বা আমরা ন্যূনতম রোলসের প্রান্তে পৌঁছায় না, তবে এটি স্বাভাবিক সম্ভাবনার উপর ভিত্তি করে ফর্সা হিট দেয়।
  • যদি অতীতের রোলগুলি থেকে পর্যবেক্ষণের সম্ভাবনাটি একে অন্যায় বলে মনে করে, এটি একটি "ফর্সা-ইয়েজিং" হিট দেয়।

এটি সীমানা সম্ভাবনার উপর ভিত্তি করে অন্যায় হিসাবে বিবেচিত হয়। উদাহরণস্বরূপ, 20% এর সম্ভাব্যতার জন্য, আপনি নিম্ন সীমা হিসাবে 10% এবং উপরের সীমানা হিসাবে 40% সেট করতে পারেন।

এই সীমানাগুলি ব্যবহার করে, আমি খুঁজে পেয়েছি যে 10 টি হিট রানের সাথে, সময়টির 14.2% সত্য সিউডোরডম বাস্তবায়ন ফলাফল দেয় যা সেই সীমার বাইরে ছিল । প্রায় 11% সময়, 0 টি 0 টি সমালোচিত আঘাত হানে। সময়ের 3.3%, 5 বা ততোধিক সমালোচক হিট 10 এর মধ্যে অবতরণ করা হয়েছিল স্বাভাবিকভাবেই, এই অ্যালগরিদম ব্যবহার করে (সর্বনিম্ন 5 রোল গণনা সহ), "ফেয়ারিশ" রানগুলির তুলনায় অনেক কম পরিমাণ (0.03%) সীমার বাইরে ছিল না । এমনকি যদি নীচের বাস্তবায়ন অনুপযুক্ত (আরও চতুর জিনিসগুলি অবশ্যই করা যায়) তবে এটি লক্ষণীয় যে লক্ষণীয়ভাবে আপনার ব্যবহারকারীরা প্রায়শই অনুভব করবেন যে এটি একটি বাস্তব সিউডোরডম সমাধানের সাথে অন্যায় unf

এখানে FairishBagরুবিতে লেখা আমার মাংস । সম্পূর্ণ বাস্তবায়ন এবং দ্রুত মন্টি কার্লো সিমুলেশন এখানে উপলব্ধ (সংক্ষেপে)

def fire!
  hit = if @rolls >= @min_rolls && observed_probability > @unfair_high
    false
  elsif @rolls >= @min_rolls && observed_probability < @unfair_low
    true
  else
    rand <= @probability
  end
  @hits += 1 if hit
  @rolls += 1
  return hit
end

def observed_probability
  @hits.to_f / @rolls
end

আপডেট: এই পদ্ধতিটি ব্যবহার করে উপরের সীমাগুলি ব্যবহার করে প্রায় 22% পর্যন্ত সমালোচনামূলক আঘাত হানার সামগ্রিক সম্ভাবনা বৃদ্ধি পায়। আপনি এর "বাস্তব" সম্ভাবনাটি কিছুটা কম সেট করে এটি অফসেট করতে পারেন। ফর্সা পরিবর্তনের সাথে 17.5% এর সম্ভাবনা প্রায় 20% পর্যবেক্ষণের দীর্ঘমেয়াদী সম্ভাবনা দেয় এবং স্বল্পমেয়াদী রানগুলি ন্যায্য বোধ করে keeps


আমি মনে করি এটি আমার সমাধানের পক্ষে সেরা সমাধান su সেরা নির্দেশিত উত্তরে উল্লিখিত শাফল ব্যাগটি খারাপ নয়, তবে প্রচুর গণনার প্রয়োজন, এবং আমি সহজ সমাধানটি পছন্দ করি যা লক্ষ্যকে বাড়ে।
চিন্তাবিদ

স্টিভ রবিন গেমস এলোমেলোতা সম্পর্কে একটি আকর্ষণীয় নিবন্ধ লিখেছিলেন। সংক্ষেপে, সত্য "এলোমেলো" আচরণ বেশিরভাগ মানুষের কাছে এলোমেলোভাবে "অনুভূতি" দেয় না এবং অধ্যয়নগুলি এটিকে সমর্থন করে। তাঁর নিবন্ধটি এআই সিদ্ধান্ত এবং গেম লজিকের জন্য ফিল্টারড র‌্যান্ডমনেস নামে পরিচিত এবং এটি "এআই গেম প্রোগ্রামিং উইজডম 2" (2003) এ উপস্থিত হয়। আপনার এটি পরীক্ষা করা উচিত, সম্ভবত আপনার পক্ষে কার্যকর হবে।
জেফ টাকার

@ ইয়ানটেরেল আপনার পরীক্ষাগুলির নমুনার আকার কত বড় তা বোঝানো ভাল হবে, এই সম্ভাব্যতাগুলি নির্ধারণ করার জন্য কতগুলি লড়াই রয়েছে।

@ ব্যবহারকারী677656: এটি প্রকাশের মধ্যে রয়েছে তবে এটি 100 কিল
আয়ান টেরেল

223

তার মানে, 5 টির মধ্যে 1 টি হিট সমালোচনা করা উচিত। সমস্যাটি হ'ল আমি খুব খারাপ বাস্তব জীবনের ফলাফল পেয়েছি - কখনও কখনও খেলোয়াড়রা 5 টি হিটগুলিতে 3 সমালোচক পায়, কখনও কখনও 15 হিটগুলিতে কোনও হয় না।

আপনার যা দরকার তা হল একটি ব্যাগ ব্যাগ । এটি গেমসের জন্য সত্য এলোমেলো হওয়ার সমস্যা সমাধান করে।

অ্যালগরিদমটি এরকম: আপনি একটি ব্যাগে 1 টি সমালোচক এবং 4 টি অ-সমালোচক হিট রেখেছেন। তারপরে আপনি ব্যাগে তাদের ক্রমটি এলোমেলো করে দিন এবং একবারে সেগুলি বেছে নিন। ব্যাগটি খালি হয়ে গেলে আপনি আবার এটি একই মান দিয়ে পূরণ করুন এবং এলোমেলো করে দিন। এইভাবে আপনি প্রতি 5 টি হিট প্রতি গড়ে 1 টি সমালোচক হিট পাবেন এবং একটানা সর্বাধিক 2 সমালোচনামূলক এবং 8 টি অ-সমালোচক হিট পাবেন। আরও এলোমেলো করার জন্য ব্যাগে আইটেমের সংখ্যা বাড়ান।

এখানে একটি প্রয়োগকরণের (জাভাতে) উদাহরণ এবং এর পরীক্ষাগুলির উদাহরণ যা আমি কিছুক্ষণ আগে লিখেছিলাম।


21
সমালোচনা ছাড়াই ভাল ধারণার জন্য + 1। উচ্চতর ডিগ্রী
এলোমেলো

16
আপনার ব্যাগের আকার 10 থাকতে পারে 1 টি হিট করুন, এর সাথে একটি সেকেন্ডের 30% সুযোগ chance যদি সমালোচনামূলক সুযোগের পরিবর্তন হয় তবে আপনি কেবল ব্যাগটি ফেলে দিতে পারেন এবং একটি নতুন শুরু করতে পারেন। মনে রাখবেন যে এই জাতীয় কোনও স্কিম ঝুঁকি নিয়ে চলেছে যে আপনি (বা আপনার প্রতিপক্ষ) যদি আপনার সমালোচনামূলক আঘাতের সম্ভাবনা এবং ব্যাগের আকার জানেন তবে আপনি মাঝে মাঝে নিশ্চিতভাবে জানতে পারেন যে আপনি নির্দিষ্ট সংখ্যক রোলগুলির জন্য অন্য কোনও সমালোচক পাবেন না। এটি কৌশলকে প্রভাবিত করতে পারে।
স্টিভ জেসপ

3
হ্যাঁ ... এরকম কিছুতে আপনি কার্ড গণনার অনুরূপ রিক্স চালাচ্ছেন। আমি কি চশমা ঝুঁকিপূর্ণ বা বড় মারার জন্য যাচ্ছি ... সম্ভাব্য ফলাফলের একটি ছোট্ট সেট সেট ক্ষতির ঝুঁকি হ্রাস করতে পারে এবং "গেমড" হওয়ার সম্ভাবনা বাড়িয়ে তুলতে পারে
ম্যাথু হোয়াইট

8
আমি এলোমেলো ব্যাগ ধারণা পছন্দ করি তবে আমি মনে করি না এটি এই গেমটি "স্পিরিট" এর সাথে মিলে যায় কারণ আপনার সমালোচনামূলক হিট সম্ভাবনা 20% (যার অর্থ আপনি 10 টি হিট-তে কোনও কিছুই করতে পারবেন না) আর সম্ভাবনা নয়। এটি প্রতি 5 টি হিট ঠিক 1 হিট হয়ে যায়। তদতিরিক্ত, সমালোচনামূলক আঘাতের সম্ভাবনা পরিবর্তনটি যদি ব্যাগটি পুনরায় তালিকাভুক্ত করা হয় তবে গেমটিতে সমস্যা রয়েছে। যদি আমার সমালোচনামূলক হিট হয়ে যায়, তবে আমি এর আগে পরবর্তী সমালোচককে পাওয়ার জন্য নিজের উপর স্পেল ফেলে দেব: পি
মাইকেল কার্পেন্টিয়ার

2
@ জোনাথন: আপনি যে বড় আকারের ব্যাগটি দিয়েছেন তা তৈরি করা পুরো ব্যাগ-ধারণাটিকে পূর্বাবস্থায় ফেলে দেয়: একটি গ্রহণযোগ্য পরিমাণ নিক্ষেপের মধ্যে কিছু ঘটেছিল (তা সমালোচনামূলক) তা নিশ্চিত করার জন্য। ব্যাগ 50000 বড় করা প্রায় এলোমেলো নম্বর জেনারেটর ব্যবহার করার মত একই।
dstibbe

113

এলোমেলো অর্থ কী তা সম্পর্কে আপনার একটি ভুল ধারণা রয়েছে।

এর মধ্যে কোনটি এলোমেলো?

এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন

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


25
ভাল Numb3rs ব্যাখ্যা!
আরএমএএলমেইডা

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

8
আপনি যে সম্ভাবনাটি বলেছেন তা বিতরণ এলোমেলোভাবে পরিমাপ করতে পারবেন।
ceejayoz


2
ন্যায়সঙ্গত হওয়ার জন্য, যদিও ওপি সঠিক শব্দটি ব্যবহার করছে না, তিনি বুঝতে পেরেছেন যে এলোমেলো নম্বর জেনারেটর তাকে প্রথম গ্রাফের মতো আরও কিছু দিচ্ছে, যখন সে দ্বিতীয় গ্রাফের মতো আরও কিছু চায় কারণ এটি ব্যবহারকারীকে আরও "ন্যায্য" বোধ করে।
কিপ

88

আপনি যে আচরণটির জন্য জিজ্ঞাসা করছেন তা প্রদত্ত, আমি মনে করি আপনি ভুল পরিবর্তনশীলটিকে এলোমেলো করে দিচ্ছেন।

এই হিটটি সমালোচনামূলক হবে কিনা তা এলোমেলো করার পরিবর্তে , পরবর্তী সমালোচনামূলক হিট না হওয়া পর্যন্ত মোড়ের সংখ্যাটি এলোমেলো করে চেষ্টা করুন। উদাহরণস্বরূপ, প্রতিবার প্লেয়ারের সমালোচনা হওয়ার সময় কেবল 2 এবং 9 এর মধ্যে একটি সংখ্যা বাছাই করুন এবং তারপরে অনেকগুলি রাউন্ড পেরিয়ে যাওয়ার পরে তাদের পরবর্তী সমালোচনা করুন। আপনি সাধারণ বিতরণে কাছে যেতে ডাইস পদ্ধতিগুলিও ব্যবহার করতে পারেন - উদাহরণস্বরূপ, আপনি 2D4 টার্নগুলিতে আপনার পরবর্তী সমালোচনা পাবেন।

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


আমি মনে করি এটি দুর্দান্ত সমাধান, তবে প্রায় ৮০% সুযোগ কী?
চিন্তাবিদ

আমি একইসাথে বহু-মাত্রিক এলোমেলো জেনারেটর ব্যবহার করতে চাই। হিট হওয়ার সম্ভাবনা + পাওয়ার সম্ভাবনা + সম্ভাবনা সমালোচনামূলক। ডি অ্যান্ড ডি-তে বেশ কয়েকটি ভিন্ন ডাইস
ঘূর্ণনের মত

আমি এই ধারণাটি পছন্দ করি এবং আপনি ধাপের পাল্টা জিনিস সম্পর্কে সম্পূর্ণরূপে সঠিক, এটি চূড়ান্ত ফ্যান্টাসিতে খুব দীর্ঘ সময়ের জন্য ব্যবহৃত হয়েছে, উদাহরণস্বরূপ
এড জেমস

এর সাথে একটি সমস্যা হ'ল এটি কেবল তখনই কাজ করে যদি সমালোচনার সম্ভাবনা হিটগুলির মধ্যে প্রায় স্থির থাকে। ধরুন যে মধ্যযুদ্ধের প্লেয়ারটি এমন একটি স্পেল ফেলে যা তাদের সমালোচনামূলক আঘাতের সম্ভাবনা দ্বিগুণ করে। তারপরে আপনি কীভাবে মোড়ের সংখ্যা সামঞ্জস্য করবেন?
অ্যালেক্স 319

+1 খুব সুন্দর, এছাড়াও খুব সহজেই 20% এর চেয়ে কম গোল থেকে হিট সম্ভাবনাগুলি পরিচালনা করে।
অ্যালিস পুরসেল

53

প্রথমে "যথাযথ" বিতরণ সংজ্ঞা দিন। এলোমেলো সংখ্যাগুলি, ভাল, এলোমেলো - আপনি যে ফলাফলগুলি দেখছেন তা সম্পূর্ণরূপে (সিউডো) এলোমেলোতার সাথে সামঞ্জস্যপূর্ণ।

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

যদি তা না হয় তবে ব্যর্থতা রেকর্ড করুন এবং পরের বারে 1 থেকে 5 পর্যন্ত একটি সংখ্যা তৈরি করুন, তবে মেঝে (numFailures / 2) যোগ করুন। সুতরাং এবার, তাদের 5 টির মধ্যে 1 টি সুযোগ রয়েছে। যদি তারা ব্যর্থ হয়, পরের বারের বিজয়ী ব্যবধান 4 এবং 5; সাফল্যের 5 এ 2। 8 টি ব্যর্থতার পরে এই পছন্দগুলি সহ, তারা অবশ্যই সফল।


এই নোটটিতে ... এলোমেলো সংখ্যার বিস্তৃতি বিতরণকে প্রভাবিত করবে ... যেমন একটি র‌্যান্ডম r = নতুন র‌্যান্ডম () বেছে নেওয়া; আর.নেক্সট (1,5) বনাম আর.নেক্সট (1, 1000000)% 200000
ইওন ক্যাম্পবেল

23
অনুরোধের পিছনে সমস্যাটি দেখার জন্য ওপিকে না বলার পরিবর্তে তিনি এলোমেলোভাবে ভুল বোঝেন।
বরিস কলেনস

4
মনে রাখবেন যে আপনি যদি এটি করেন তবে তাদের সাফল্যের সামগ্রিক অনুপাত 5 এর মধ্যে 1 এর চেয়ে বেশি হবে around এর চারপাশের উপায়টি (উদাহরণস্বরূপ) ১.১০০ পরিসর থেকে এলোমেলোভাবে ২০ টি পৃথক সংখ্যা বেছে নিতে হবে এবং পূর্ব নির্ধারণ করুন যে সেগুলি কী হবে তাদের সমালোচনা হতে। যদিও এটি একগুচ্ছ আরও বুককিপিং।
স্টিভ জেসপ

"5 এর মধ্যে 1 এর চেয়ে বেশি হবে" - এটি দীর্ঘমেয়াদে প্রত্যাশিত, মানে আমার।
স্টিভ জেসপ

আপনি শুরু করার সম্ভাবনাটি কিছুটা কমিয়ে ফেলতে পারেন, যাতে সামগ্রিক অনুপাতটি 1/5 এ কমে যায়। আপনাকে এটিকে কতটা কমিয়ে আনতে হবে তা আমি কাজ করি নি, তবে সবকিছু অবিচ্ছিন্ন তাই সঠিক উত্তর থাকতে হবে।
স্টিভ জেসপ

35

এমটি_রেন্ড () এর মতো কিছু দিয়ে প্রতিস্থাপন সম্পর্কে কীভাবে?

এক্সকেসিডি কমিক (আরএফসি 1149.5 4 টি স্ট্যান্ডার্ড আইইইই-পরীক্ষিত র্যান্ডম নম্বর হিসাবে নির্দিষ্ট করে specif)

(আরএফসি 1149.5 4 টি স্ট্যান্ডার্ড আইইইই-পরীক্ষিত র্যান্ডম নম্বর হিসাবে নির্দিষ্ট করে specif)

এক্সকেসিডি থেকে ।


ভাল, তবে এটি কি ওপিসের এলোমেলো সংখ্যা বিতরণ সমস্যার সমাধান করবে? ;-)
আরজান আইনবু

আসলে তা না; তিনি একটি নন-এলোমেলো আরএনজি চাইছেন, যার জন্য তিনি এই ফাংশনটি ব্যবহার করতে পারেন; তবে তিনি কী চান তা বর্তমান শীর্ষ উত্তর দ্বারা আরও ভালভাবে ব্যাখ্যা করা হয়েছে ( স্ট্যাকওভারফ্লো / প্রশ্ন / 910215 / 910224#910224 )
কলিন পিকার্ড

28
এটি ওপি যা চায় তার চেয়েও বেশি এলোমেলো
Çağdaş টেকিন

-1 কারণ আরএফসি 1149 এর কোনও বিভাগ 5 নেই (এবং পর্যায়ক্রমে 1149.5 নেই); ন্যায্য এলোমেলো জন্য +1।
গ্রেফ্যাড

34

আশা করি এই নিবন্ধটি আপনাকে সহায়তা করবে: http://web.archive.org/web/20090103063439/http://www.gamedev.net:80/references/design/features/randomness/

'এলোমেলো সংখ্যা' উত্পন্ন করার এই পদ্ধতিটি আরপিজি / মিমোর্পিজ গেমগুলিতে প্রচলিত।

যে সমস্যাটি এটি সমাধান করে তা হ'ল (নিষ্কাশন):

আপনার গলায় একটি ব্লেড মাকড়সা রয়েছে। এটি হিট এবং আপনি মিস। এটি আবার আঘাত এবং আপনি আবার মিস। এবং বারবার, যতক্ষণ না আপনার আঘাত করার কিছুই বাকি নেই। আপনি মারা গেছেন এবং আপনার মৃতদেহের উপর দুটি টন আরাকনিড গ্লোটিং করছে। অসম্ভব? না। অসম্পূর্ণ? হ্যাঁ. তবে পর্যাপ্ত খেলোয়াড় দেওয়া এবং পর্যাপ্ত সময় দেওয়া অসম্ভব প্রায় নিশ্চিত হয়ে যায়। এটি যে ব্লেড মাকড়সা শক্ত ছিল না, এটি ছিল কেবল দুর্ভাগ্য। কত হতাশার। কোনও খেলোয়াড়কে ছাড়তে চান তা যথেষ্ট।


1
আমি এ সম্পর্কে বৈকল্পিক শুনেছি - "বিশ্বের জনসংখ্যায় দশ মিলিয়ন ইভেন্টে একটি ঘটে 6,০০০ বার"।
সেজেজোজ

19

আপনি যা চান তা এলোমেলো সংখ্যা নয়, তবে এমন একটি সংখ্যা যা মানুষের কাছে এলোমেলো মনে হয়। অন্যান্য ইতিমধ্যে পৃথক পৃথক অ্যালগরিদমের পরামর্শ দিয়েছেন, যা আপনাকে সাফল্যের মতো বদলে ফেলতে সহায়তা করতে পারে।

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

এআই সিদ্ধান্ত এবং গেম যুক্তির জন্য ফিল্টার করা এলোমেলোতা :

বিমূর্ততা: প্রচলিত জ্ঞানের পরামর্শ দেয় যে এলোমেলো সংখ্যা জেনারেটর যত ভাল ততই আপনার গেমটি অনাকাঙ্ক্ষিত হবে। যাইহোক, মনোবিজ্ঞানের অধ্যয়ন অনুসারে, স্বল্প মেয়াদে সত্যিকারের এলোমেলোতা প্রায়শই মানুষের কাছে স্থিরভাবে অযৌক্তিক দেখায়। এই নিবন্ধটি দেখায় যে কীভাবে এআই এর সিদ্ধান্ত এবং গেম লজিককে খেলোয়াড়দের আরও এলোমেলো দেখায়, এখনও দৃ still় পরিসংখ্যানের এলোমেলোতা বজায় রেখে।

আপনি আরও একটি অধ্যায় আকর্ষণীয় খুঁজে পেতে পারেন:

পরিসংখ্যান

বিমূর্ত: র্যান্ডম নম্বরগুলি কৃত্রিম বুদ্ধিমত্তা এবং সাধারণভাবে গেমস দ্বারা সবচেয়ে বেশি ব্যবহৃত হয়। তাদের সম্ভাব্যতা উপেক্ষা করা গেমটি অনুমানযোগ্য এবং বিরক্তিকর করা। এগুলিকে ভুলভাবে ব্যবহার করা ঠিক তাদের উপেক্ষা করার মতোই খারাপ হতে পারে। এলোমেলো সংখ্যা কীভাবে উত্পন্ন হয়, তাদের সীমাবদ্ধতা এবং তাদের ক্ষমতাগুলি বুঝতে আপনার গেমগুলিতে এগুলি ব্যবহারের অনেকগুলি সমস্যা দূর করতে পারে। এই নিবন্ধটি এলোমেলো সংখ্যা, তাদের প্রজন্ম এবং ভালকে খারাপ থেকে আলাদা করার পদ্ধতিগুলির অন্তর্দৃষ্টি দেয়।


8

নিশ্চয়ই কোনও র্যান্ডম সংখ্যার প্রজন্মের এমন রান তৈরির সুযোগ আছে? আপনি যথাযথ শতাংশ দেখতে 3-10 রোলগুলিতে একটি বড় পরিমাণের নমুনা সেট পাচ্ছেন না।

হতে পারে আপনি যা চান তা করুণার দ্বার ... শেষ 10 রোলগুলি মনে রাখবেন, এবং যদি তাদের কোনও সমালোচনা না ঘটে থাকে তবে তাদের একটি ফ্রিবি দিন। এলোমেলোতার স্লিং এবং তীরগুলি মসৃণ করুন।


8

আপনার সেরা সমাধানটি একাধিক বিভিন্ন র্যান্ডম স্কিমগুলির সাথে প্লে-টেস্টিং হতে পারে এবং খেলোয়াড়দের সবচেয়ে আনন্দিত করে তোলে pick

আপনি কোনও প্রদত্ত এনকাউন্টারে একই সংখ্যার জন্য ব্যাক-অফ নীতিও চেষ্টা করতে পারেন, যেমন, যদি কোনও খেলোয়াড় 1তাদের প্রথম টার্নটিতে রোল দেয় তবে তা গ্রহণ করুন। অন্য পেতে 1তাদের 1একটি সারিতে 2 টি রোল করতে হবে । তৃতীয় পেতে 1তাদের একটি সারিতে 3 টি দরকার, বিজ্ঞাপনটি অন্তর্ভুক্ত করুন।


7

দুর্ভাগ্যক্রমে আপনি যা জিজ্ঞাসা করছেন তা কার্যকরভাবে একটি নন-র্যান্ডম নম্বর জেনারেটর - কারণ আপনি চান পরবর্তী নম্বর নির্ধারণের সময় পূর্ববর্তী ফলাফলগুলি বিবেচনায় নেওয়া উচিত। এটি এলোপাতাড়ি সংখ্যার জেনারেটর কাজ করে না তা আমি ভীত।

আপনি যদি হিট প্রতি 5 টির মধ্যে 1 টি সমালোচক হতে চান তবে কেবল 1 থেকে 5 এর মধ্যে একটি সংখ্যা বাছাই করুন এবং বলবেন যে আঘাতটি সমালোচিত হবে।


1
তিনি গেমস বান্ধব এলোমেলো চান, যদি আপনি কিছু ক্ষেত্রে কঠোর র্যান্ডম উত্পন্ন সংখ্যা ব্যবহার করেন তবে আপনি "কোরিয়ান এলোমেলো" ফলাফল অর্জন করতে পারেন having এগুলি এলোমেলো ফলাফল যা খেলোয়াড়রা খুব প্রায়ই রাগান্বিত হন এবং হতাশ হন (কোনও বংশ 2 প্লেয়ারকে জিজ্ঞাসা করুন);)
জুয়ান টেচেরা

ফলস্বরূপ, প্রথম হিটটি যদি সমালোচক হয় তবে পরবর্তী চারটি হবে না। এটি ওপি যেমনটি চায় তেমন শোনায় তবে আপনি যখন এটি এটিকে উচ্চারণ করেন, তখন এটি মন্দপ্রবণ হয়। আপনি তার জন্য আমার UV পান।
বেলগারিয়ানথেকিং

-1 আপনি "স্মৃতিবিহীন" সাথে "র্যান্ডম" বিভ্রান্ত বলে মনে হচ্ছে - en.wikedia.org/wiki/ স্মৃতিহীনতা
অ্যালিস পুরসেল

7

mt_rand () একটি মার্সেন টুইস্টার বাস্তবায়নের উপর ভিত্তি করে তৈরি করা হয়েছে, যার অর্থ এটি আপনি পেতে পারেন এমন সেরা এলোমেলো বিতরণগুলির একটি দেয়।

স্পষ্টতই আপনি যা চান তা এলোমেলো নয়, তাই আপনি কী চান তা নির্দিষ্ট করে শুরু করা উচিত। আপনি সম্ভবত উপলব্ধি করতে পারেন যে আপনার বিরোধী প্রত্যাশা রয়েছে - ফলাফলগুলি সত্যই এলোমেলো হওয়া উচিত এবং অনুমানযোগ্যও না, তবুও একই সময়ে তাদের বর্ণিত সম্ভাবনা থেকে স্থানীয় পরিবর্তনগুলি প্রদর্শন করা উচিত নয় - তবে এটি অনুমানযোগ্য হয়ে ওঠে। আপনি যদি এক সারি সর্বাধিক 10 নন-ক্রিট সেট করেন, তবে আপনি খেলোয়াড়দের স্রেফ বলেছেন যে "যদি আপনার সারিতে 9 টি অ-সমালোচক থাকে তবে পরেরটি 100% নিশ্চিততা নিয়ে সমালোচিত হবে" - আপনি সম্ভবত এলোমেলোভাবে মোটেও বিরক্ত করবেন না।


6

এত অল্প সংখ্যক পরীক্ষার মাধ্যমে আপনার ফলাফলগুলি যেমন আশা করা উচিত:

সত্যিকারের এলোমেলোতা কেবলমাত্র বিশাল আকারের আকারেই অনুমানযোগ্য, যেমন একটি মুদ্রা ফ্লিপ করা এবং প্রথমবারের মতো পরপর 3 বার মাথা পাওয়া সম্ভব, তবে কয়েক মিলিয়ন ফ্লপ আপনি প্রায় 50-50 এর সাথে শেষ করবেন।


7
যদিও এখনও কয়েক মিলিয়ন ফ্লপ পরে যাওয়ার সম্ভাবনা রয়েছে, আপনি এখনও মুদ্রার একদিকই দেখতে পাবেন seen যদিও এটি কখনও ঘটে, আপনি সম্ভবত একটি অসীম অসম্ভব ড্রাইভের খুব কাছে বসে
গ্রান্ট পিটার্স

হাহা, হ্যাঁ তবে সুযোগটি এতটাই অবিশ্বাস্যভাবে কম যে গণিতের আইন অনুসারে আপনাকে একটি সম (বিতরণ) বিতরণ দেখতে হবে।
এড জেমস

6

আমি পূর্ববর্তী উত্পন্ন সংখ্যাগুলি ট্র্যাক রাখতে বা সমস্ত সম্ভাব্য মানগুলি বদল করার পরামর্শ দিয়ে অনেক উত্তর দেখতে পাচ্ছি।

ব্যক্তিগতভাবে, আমি একমত নই, এক সারিতে 3 টি সমালোচক খারাপ। না আমি একমত না যে একটানা 15 জন অ-সমালোচক খারাপ bad

আমি প্রতিটি সংখ্যার পরে সমালোচনার সুযোগটি স্বতঃ পরিবর্তন করে সমস্যার সমাধান করব। উদাহরণ (ধারণাটি প্রদর্শনের জন্য):

int base_chance = 20;
int current_chance = base_chance;

int hit = generate_random_number(0, 100) + 1; // anything from 1 to 100
if(hit < current_chance)//Or whatever method you use to check
{
    //crit!
    if(current_chance > base_chance)
        current_chance = base_chance; // reset the chance.
    else
        current_chance *= 0.8; // decrease the crit chance for the NEXT hit.
}
else
{
    //no crit.
    if(current_chance < base_chance)
        current_chance = base_chance; // reset the chance.
    else
        current_chance *= 1.1; // increase the crit chance for the NEXT hit.
    //raise the current_chance
}

আর আপনি সমালোচক না পান - সমালোচকদের আপনার পরবর্তী ক্রিয়াকলাপের জন্য উচ্চতর সুযোগ। আমি যে রিসেটটি অন্তর্ভুক্ত করেছি তা সম্পূর্ণরূপে alচ্ছিক এবং এটির প্রয়োজন আছে কিনা তা জানানোর জন্য এটির পরীক্ষা প্রয়োজন। দীর্ঘ অ-সমালোচক অ্যাকশন শৃঙ্খলার পরে, টানা একাধিক ক্রিয়াকলাপের জন্য সমালোচকের উচ্চতর সম্ভাবনা দেওয়া বাঞ্ছনীয় হতে পারে।

আমার 2 সেন্টে ফেলে দিচ্ছি ...


আমি এই ধরণের পদ্ধতির পছন্দ করি। আমি সম্ভবত এটি অন্যভাবে করতাম would একটি কম সুযোগ দিয়ে শুরু করুন এবং সর্বোচ্চ 20% + কিছু সংখ্যক শতাংশ তৈরি করুন যতক্ষণ না এটি আঘাত পায় এবং আবার কিছুটা কম পরিমাণে পুনরায় সেট করুন।
ম্যাথু

5

শীর্ষ কয়েকটি উত্তর দুর্দান্ত ব্যাখ্যা, সুতরাং আমি কেবলমাত্র একটি অ্যালগরিদম ফোকাস করব যা আপনাকে "খারাপ স্ট্রাইক" এর সম্ভাব্যতার উপর নিয়ন্ত্রণ দেয় যখন কখনই সংক্ষিপ্ততাবাদী না হয়ে ওঠে। আপনার যা করা উচিত বলে আমি মনে করি তা এখানে:

পি উল্লেখ করার পরিবর্তে, বার্নোল্লি বিতরণের পরামিতি, যা আপনার সমালোচনামূলক আঘাতের সম্ভাবনা, একটি এবং নির্দিষ্ট করে, বিটা বিতরণের প্যারামিটারগুলি, বার্নোল্লি বিতরণের "সম্মিলন পূর্ব"। আপনার এবং বি ট্র্যাক রাখা দরকার , এখন পর্যন্ত সমালোচক এবং অ-সমালোচিত হিটগুলির সংখ্যা।

এখন, a এবং b নির্দিষ্ট করতে , নিশ্চিত করুন যে একটি / (a ​​+ b) = পি, সমালোচনামূলক হিট হওয়ার সম্ভাবনা। ঝরঝরে বিষয় হ'ল (এ + বি) সাধারণভাবে আপনি এ / (এ + বি) কতটা কাছাকাছি থাকতে চান তা পরিমিত করে।

আপনি আপনার নমুনাটি এভাবে করেন:

দিন p(x)বিটা বিতরণের সম্ভাব্যতা ঘনত্ব ফাংশন হও। এটি অনেক জায়গায় পাওয়া যায় তবে আপনি এটি জিএসএলে gsl_ran_beta_pdf হিসাবে খুঁজে পেতে পারেন।

S = A+B+1
p_1 = p((A+1)/S)
p_2 = p(A/S)

সম্ভাব্যতা p_1 / (p_1 + p_2) সহ বার্নৌলি বিতরণ থেকে নমুনা সংগ্রহ করে একটি সমালোচনামূলক আঘাত চয়ন করুন

যদি আপনি দেখতে পান যে এলোমেলো সংখ্যার অনেকগুলি "খারাপ রেখা" রয়েছে , তবে একটি এবং বি স্কেল করুন , তবে সীমাতে, এবং হিসাবে অনন্ততায় যায়, আপনার কাছে আগে বর্ণিত এলোমেলো ব্যাগ এপ্রোচ হবে।

আপনি যদি এটি বাস্তবায়ন করেন তবে দয়া করে আমাকে তা জানান!


5

আপনি যদি এমন একটি বিতরণ চান যা পুনরাবৃত্তি মানকে নিরুৎসাহিত করে, আপনি একটি সাধারণ পুনরাবৃত্তি প্রত্যাখ্যান অ্যালগরিদম ব্যবহার করতে পারেন।

যেমন

int GetRand(int nSize)
{
    return 1 + (::rand() % nSize);
}
int GetDice()
{
    static int nPrevious=-1;
    while (1) {
        int nValue = GetRand(6);
        // only allow repeat 5% of the time
        if (nValue==nPrevious && GetRand(100)<95)
            continue;
        nPrevious = nValue;
        return nValue;
    }
}

এই কোডটি পুনরাবৃত্তিগুলি অসম্ভব তবে অসম্ভব নয় এমন সময়ে 95% সময়ের পুনরাবৃত্তি মানগুলিকে প্রত্যাখ্যান করে। পরিসংখ্যানগত দিক থেকে এটি কিছুটা কুরুচিপূর্ণ তবে এটি সম্ভবত আপনি চান ফলাফলগুলি উত্পাদন করবে। অবশ্যই, এটি "5 4 5 4 5" এর মতো বিতরণকে আটকাবে না। আপনি ফ্যানসিয়ার পেতে পারেন এবং দ্বিতীয় শেষ (বলুন) সময় 60% এবং তৃতীয় শেষ (বলুন) 30% প্রত্যাখ্যান করতে পারেন।

আমি এটিকে ভাল গেমের নকশা হিসাবে প্রস্তাব দিচ্ছি না। আপনি কী চান তা কীভাবে অর্জন করবেন তা সহজভাবে পরামর্শ দিচ্ছেন।


আমার গেমের সমালোচনামূলক হিটের মতো কিছু মানের 50% এর বেশি সুযোগ থাকতে পারে না, তাই আমি মোটেও পুনরাবৃত্তি করা অবরুদ্ধ করছি, তবে এটি কিছু অনুমানের জন্য ইভেন্টের সুযোগকে হ্রাস করে।
চিন্তাবিদ

4

আপনি কী চান তা সত্যিই পরিষ্কার নয়। এমন কোনও ফাংশন তৈরি করা সম্ভব যে আপনি এটির প্রথম পাঁচ বার কল করলে এটি একটি এলোমেলো ক্রমে 1-5 নম্বরগুলি প্রদান করে।

তবে এটি আসলে এলোমেলো নয়। প্লেয়ারটি জানতে পারবেন যে পরের ৫ টি আক্রমণে তিনি ঠিক একজন পেয়ে যাবেন। এটি আপনি যা চান তা হতে পারে, এবং সেক্ষেত্রে আপনাকে কেবল এটি কোডিং করতে হবে। (সংখ্যাযুক্ত একটি অ্যারে তৈরি করুন এবং তারপরে এলোমেলো করুন)

বিকল্পভাবে, আপনি আপনার বর্তমান পদ্ধতির ব্যবহার চালিয়ে যেতে পারেন এবং ধরে নিতে পারেন যে আপনার বর্তমান ফলাফলগুলি কোনও খারাপ র্যান্ডম জেনারেটরের কারণে। মনে রাখবেন যে আপনার বর্তমান সংখ্যাগুলির সাথে ভুল কিছু নাও হতে পারে। এলোমেলো মানগুলি এলোমেলো। কখনও কখনও আপনি পরপর একই মান 2, 3 বা 8 পেতে। কারণ তারা এলোমেলো। একটি ভাল এলোমেলো জেনারেটর কেবল গ্যারান্টি দেয় যে গড়ে, সমস্ত সংখ্যা সমানভাবে ফিরে আসবে।

অবশ্যই যদি আপনি কোনও খারাপ এলোমেলো জেনারেটর ব্যবহার করে থাকেন, তবে এটি আপনার ফলাফলগুলিকে ঝাঁকুনিতে ফেলেছে এবং যদি তাই হয় তবে আরও ভাল র্যান্ডম জেনারেটরে স্যুইচিংয়ের ফলে সমস্যাটি সমাধান করা উচিত। (আরও ভাল জেনারেটরের জন্য বুস্ট.র্যান্ডম লাইব্রেরিটি দেখুন)

বিকল্পভাবে, আপনি আপনার এলোমেলো ফাংশন দ্বারা ফিরে আসা সর্বশেষ এন মানগুলি মনে করতে পারেন এবং ফলাফলগুলি ওজন করে weigh (একটি সাধারণ উদাহরণ হ'ল, "নতুন ফলাফলের প্রতিটি ঘটনার জন্য, আমাদের মানটি বাতিল করে একটি নতুন পাওয়ার 50% সুযোগ রয়েছে"

যদি আমার অনুমান করতে হয় তবে আমি বলতে পারি যে "সত্যিকারের" এলোমেলোভাবে আটকে রাখা আপনার সেরা বাজি। আপনি একটি ভাল এলোমেলো জেনারেটর ব্যবহার করেছেন তা নিশ্চিত করুন এবং তারপরে আপনি এখন যেভাবে করছেন তা চালিয়ে যান।


আসলে, তিনি যে ফাংশনটি ব্যবহার করছেন তা বুস্ট লাইব্রেরির সেরা আরএনজি হিসাবে একই।
মাইকেল বর্গওয়ার্ট

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

4

আপনি 1 থেকে 5 পর্যন্ত সংখ্যা সম্বলিত একটি তালিকা তৈরি করতে পারেন এবং এলোমেলোভাবে তাদের বাছাই করতে পারেন। তারপরে আপনার তৈরি তালিকাটি কেবল। আপনার কমপক্ষে একবারে প্রতিটি সংখ্যায় চলার গ্যারান্টি রয়েছে ... আপনি যখন প্রথম 5 টি দিয়ে যাবেন তখন কেবল আরও 5 টি সংখ্যা তৈরি করুন ...


4

আমি বরফের মতো ব্যবহারের মতো একটি প্রগতিশীল শতাংশ সিস্টেমের প্রস্তাব দিই: http://www.shacknews.com/onearticle.x/57886

সাধারণত আপনি একটি আরএনজি রোল করেন তবে এটি সফল বা না তা নির্ধারণের জন্য একটি মানের সাথে তুলনা করুন। এটি দেখতে যেমন হতে পারে:

if ( randNumber <= .2 ) {
   //Critical
} else {
   //Normal
}

আপনাকে যা করতে হবে তা হ'ল বেস সুযোগের প্রগতিশীল বৃদ্ধি করা ...

if (randNumber <= .2 + progressiveChance ) {
   progressiveChance = 0;
   //Critical
} else {
   progressiveChance += CHANCE_MODIFIER;
   //Normal hit
}

আপনার যদি আরও অভিনব হওয়ার প্রয়োজন হয় তবে আরও কিছু যোগ করা বেশ সহজ। প্রগ্রেসিভ চ্যান্স 100% সমালোচনামূলক সুযোগ এড়াতে বা নির্দিষ্ট ইভেন্টগুলিতে এটি পুনরায় সেট করতে পারে এমন পরিমাণটি ক্যাপ করতে পারেন। আপনার প্রগ্রেসিভ চ্যান্স + = (1 - প্রগ্রেসিভ চ্যান্স) * এসসিএএল যেখানে এসসিএএল <1 রয়েছে এমন কিছু সহ প্রতিটি উত্সাহে সামান্য পরিমাণে প্রগতিশীল পরিবর্তন বাড়ানো যেতে পারে।


4

ঠিক আছে, আপনি যদি গণিতে কিছুটা থাকেন তবে আপনি সম্ভবত চেষ্টা করতে পারেন এক্সপেনশিয়াল বিতরণের

উদাহরণস্বরূপ, ল্যাম্বদা = ০.০, প্রত্যাশিত মানটি যদি ২ হয় (সেই নিবন্ধটি পড়ুন!), এর অর্থ আপনি সম্ভবত প্রতি ২ য় পালা (সমালোচনা) / হিট? তবে এই জাতীয় সম্ভাবনা বিতরণের মাধ্যমে আপনি 0 তম বারে (বা যা কিছু করতে চান তার বিপরীতে) নির্ধারণ করবেন (যে ইভেন্টটি ইতিমধ্যে ঘটেছে এবং টার্নকাউন্টারটি পুনরায় সেট করা হয়েছে), 40% পরবর্তী সামনের দিকে আঘাত করার মতো সুযোগ পাবেন, প্রায় 65% এটি ২ য় (পরের পরের) টার্নে করার সুযোগ, প্রায় ৮০% তৃতীয় হিট করতে হবে এবং এ জাতীয় কিছু।

এই বিতরণের পুরো উদ্দেশ্যটি হ'ল যদি কারও কাছে 50% হিটের সুযোগ থাকে এবং তিনি একটানা 3 বার মিস করেন তবে তিনি খুব শীঘ্রই উইল করেন (ভাল, 80% এর বেশি সুযোগ, এবং এটি প্রতিটি পরবর্তী সময়ে বৃদ্ধি পায়)। এটি ওভারাল 50% সুযোগ অপরিবর্তিত রেখে আরও "সুষ্ঠু" ফলাফলের দিকে নিয়ে যায়।

আপনার সমালোচকদের 20% সুযোগ নেওয়া, আপনার কাছে রয়েছে

  • 17% সমালোচক 1 ম টার্ন
  • সমস্ত পূর্ববর্তী ক্ষেত্রে যদি কোনও সমালোচক না ঘটে তবে 32% সমালোচক থেকে দ্বিতীয় দিকে ঘুরতে।
  • 45% থেকে সমালোচক 3 য় পালা, যদি সমস্ত পূর্ববর্তীগুলিতে কোনও সমালোচক না ঘটে।
  • সমস্ত পূর্ববর্তী ক্ষেত্রে যদি কোনও সমালোচক না ঘটে তবে 54% সমালোচককে চতুর্থ দিকে পরিণত করুন।
  • ...
  • পূর্ববর্তী সমস্তগুলিতে যদি কোনও সমালোচক না ঘটে তবে 80% থেকে সমালোচক 8 তম দিকে পরিণত হবে।

এটি এখনও প্রায় 0.2% (বনাম যারা 5%) 5 টি ফল হিসাবে 3 টি সমালোচক + 2 অ-সমালোচক হওয়ার সম্ভাবনা। এবং 4 টি নিয়মিত নন-সমালোচক, 5% এর 5%, 6 এর জন্য 1.5%, 7 টির জন্য 0.3%, 8 টি অনুগত অ-সমালোচকদের জন্য 0.07% সম্ভাবনা রয়েছে। আমি এর "আরও ভাল" বাজি ধরেছি 41%, 32%, 26%, 21% এবং 16% এর চেয়ে বেশি।

আশা করি আপনি এখনও মৃত্যুতে বিরক্ত হবেন না।


এটি আমার সমাধানের সাথে বেশ সমান, তবে এটি শেষ সমালোচনামূলক আঘাতের সময় থেকে কেবল "স্মরণ" করে। এই সমাধানের অধীনে, 4 সমালোচনামূলক হিটগুলির একটি স্ট্রিং ভবিষ্যতের বিষয়ে সম্ভাব্যতা হিসাবে 1 সমালোচনামূলক হিটের স্ট্রিংয়ের সমান। সুতরাং, যদি সমালোচনামূলক হিটগুলি ভাল হয় তবে এই সমাধানটি আপনার ঘাটতিজনিত ঝুঁকিকে সীমাবদ্ধ করে, তবে আপনার উল্টো দিকে নয়। আমার সমাধান উভয়কেই প্রভাবিত করে।
নীল জি

এটি সুস্পষ্ট যে বিভিন্ন সমাধানগুলির নিজস্ব সুবিধা রয়েছে। এই এক বিজ্ঞানের দৃষ্টিকোণ থেকে এলোমেলোতা পরিষ্কার রাখা উপর দৃষ্টি নিবদ্ধ করে। এর অর্থ এই নয়, এটি ব্যাগ বা অন্য কোনও জিনিসের চেয়ে কোনওভাবে ভাল। এটি কেবল একটি সমাধান যা চেষ্টা করার মতো বলে মনে হচ্ছে।
ডার্ক

3

শেষ এন আক্রমণের উপর নির্ভর করে সমালোচনার সুযোগ তৈরি করার বিষয়ে কী। একটি সাধারণ স্কিম হ'ল এক প্রকারের মার্কভ চেইন: http://en.wikedia.org/wiki/Markov_chain তবে যাইহোক কোডটি খুব সহজ।


IF turns_since_last_critical < M THEN 
   critial = false
   turns_since_last_critical++;
ELSE
   critial = IsCritical(chance);
   IF Critial THEN
       turns_since_last_critica = 0;
   ELSE
       turns_since_last_critica++;
   END IF;
END IF;

অবশ্যই আপনাকে অবশ্যই নিজের গণিত তৈরি করতে হবে কারণ সমালোচনার সম্ভাবনা কম থাকলে সমালোচনাকারীর সম্ভাবনা তার চেয়ে কম হয় যখন আপনি জানেন যে এটি শেষের থেকে যথেষ্ট বাঁক হয়েছে


আপনি কেবলমাত্র সর্বশেষ আক্রমণটিকে বিবেচনা করে বেশিরভাগ প্রভাব পান। পি পর্যবেক্ষণের হিট রেট হোক, মিসের পরে হিট রেট এবং হিটের পরে আর / 2 হিট রেট হোক। সংজ্ঞা অনুসারে, যে কোনও মুহুর্তে আপনার তখন পি = পি * আর + (1-পি) * (আর / 2) হিট করার সুযোগ রয়েছে। এর অর্থ পি = আর / (2-আর)
এমসাল্টাররা

2

ওপি,

খুব সুন্দর, যদি আপনি এটি ন্যায্য হতে চান, এটি এলোমেলো হতে চলেছে না।

আপনার গেমের সমস্যাটি হ'ল আসল দৈর্ঘ্যের। ম্যাচটি যত দীর্ঘ হবে, আপনি যত কম এলোমেলো দেখতে পাচ্ছেন (সমালোচকদের প্রবণতা 20% হবে) এবং এটি আপনার লক্ষ্যযুক্ত মানগুলির কাছে চলে যাবে।

আপনি দুটি বিকল্প পেয়েছেন, আগের রোলগুলির উপর ভিত্তি করে আক্রমণগুলি প্রাক-গণনা করুন। যা আপনি প্রতি 5 টি আক্রমণে একজন সমালোচক পাবেন (আপনার উপর ভিত্তি করে 20%), তবে আপনি এটিকে এলোমেলোভাবে অর্ডার করতে পারেন।

listOfFollowingAttacks = {হিট, হিট, হিট, মিস, ক্রিট};

আপনি চান যে প্যাটার্ন। সুতরাং এটিকে তালিকা থেকে এলোমেলোভাবে চয়ন করুন, এটি খালি না হওয়া অবধি এগুলি পুনরায় তৈরি করুন।

এটি আমার খেলার জন্য তৈরি একটি প্যাটার্ন, আমি যা করতে চাই তা এটি বেশ ভালভাবে কাজ করে।

আপনার দ্বিতীয় বিকল্পটি হ'ল সমালোচকদের সুযোগ বাড়িয়ে দেওয়া, আপনি সম্ভবত সমস্ত আক্রমণাত্মক পরিণতিতে আরও বেশি সংখ্যক সংখ্যা দেখতে যাচ্ছেন (ধরে নেওয়া যায় যে আপনার ম্যাচগুলি বরং দ্রুত শেষ হয়)। যত কম সুযোগ পাবেন, আপনি তত বেশি আরএনজি পাবেন।


2

আপনি সম্ভবত একটি সাধারণ বিতরণ চান যখন আপনি একটি লিনিয়ার বিতরণ খুঁজছেন।

আপনার যৌবনের ডি অ্যান্ড ডি খেলার কথা যদি মনে থাকে তবে আপনাকে একাধিক এন-পার্শ্বযুক্ত ডাই রোল করতে বলা হয়েছিল, তারপরে ফলাফলগুলি যোগ করুন।

উদাহরণস্বরূপ, 4 এক্স 6-পার্শ্বযুক্ত ডাই রোলিং 1 এক্স 24-পার্শ্বযুক্ত ডাইস রোলিংয়ের চেয়ে আলাদা।


2

সিটি অফ হিরোজের আসলে "স্ট্রাইকব্রেকার" নামে একটি মেকানিক রয়েছে যা ঠিক এই সমস্যার সমাধান করে। এটি যেভাবে কাজ করে তা হ'ল স্ট্রিংয়ের সর্বনিম্ন থেকে আঘাতের সম্ভাবনা সম্পর্কিত দৈর্ঘ্যের একটি স্ট্রিংয়ের পরে, পরবর্তী আক্রমণটি হিট হওয়ার গ্যারান্টিযুক্ত। উদাহরণস্বরূপ, যদি আপনি 90% এর বেশি আক্রমণ আঘাত হারাতে চান তবে আপনার পরবর্তী আক্রমণটি স্বয়ংক্রিয়ভাবে আঘাত হানবে তবে যদি আপনার হিটের সুযোগটি 60% এর চেয়ে কম হয় তবে "স্ট্রাইকব্রেকার" ট্রিগার করার জন্য আপনার একটানা একাধিক মিস করা প্রয়োজন I সঠিক সংখ্যা জানেন না)


2

বিকল্প পাঠ

এটি সত্যিই অনুমানযোগ্য ... তবে আপনি কখনই নিশ্চিত হতে পারবেন না।


এটি আমার ডেস্কটপ ওয়ালপেপার হওয়া উচিত !!

0

মান ওজন সম্পর্কে কীভাবে?

উদাহরণস্বরূপ, যদি আপনার কাছে 20% সমালোচনামূলক হিট হওয়ার সম্ভাবনা থাকে তবে 1 থেকে 5 এর মধ্যে একটি সংখ্যার সমালোচনা হিটকে উপস্থাপন করে বা 1 এবং 100 এর মধ্যে একটি সংখ্যার 20 সংখ্যা সমালোচনামূলক হিট হিসাবে উত্পন্ন করুন।

তবে যতক্ষণ আপনি এলোমেলো বা সিউডোরেন্ডম সংখ্যার সাথে কাজ করছেন, আপনি বর্তমানে যে ফলাফলগুলি দেখছেন তা সম্ভবত এড়ানো সম্ভব নয়। এটা এলোমেলো প্রকৃতি।


এবং কেন যে কোনও পার্থক্য হবে? উভয় সংখ্যার সংখ্যার সমালোচনা পাওয়ার ঠিক সমান সম্ভাবনা রয়েছে।
সামজডসন

যথাযথভাবে। আমি তার ২০% উদাহরণের জন্য কেবল দুটি বিকল্প উপস্থাপন করছি। যদিও আপনি যদি পুরো সংখ্যাটি শতাংশের সাথে কাজ করে থাকেন তবে সম্ভবত 100 টি আরও ভাল কাজ করবে, কারণ আপনি যদি এটির মতো ভাবতে চান তবে কেবল একটি "ডাই" অনুকরণ করা দরকার।
টমাস ওয়ানস

আপনি যে বিকল্পগুলি উপস্থাপন করছেন তা হ'ল তিনি ইতিমধ্যে কী করছেন।
ceejayoz

2
তিনি যা চান তার জন্য নয়। তিনি একটি এলোমেলো সংখ্যা জেনারেটর চান, এমনকি যদি তিনি মনে করেন এটিকে একটি এলোমেলো সংখ্যা জেনারেটর বলা হয়।
সিজেজোজ

0

এর প্রতিক্রিয়া: "সমস্যাটি হ'ল আমি খুব খারাপ বাস্তব জীবনের ফলাফল পেয়েছি - কখনও কখনও খেলোয়াড়রা 5 টি হিটগুলিতে 3 সমালোচক পান, কখনও কখনও 15 হিটগুলিতে কোনও কিছুই পান না।"

আপনার কাছে 15 টি হিট না পেয়ে 3 থেকে 4% এর মধ্যে কোথাও যাওয়ার সুযোগ রয়েছে ...


আপনি যখন এক মিনিটে 10000 যুদ্ধে অনলাইনে 3500 খেলোয়াড় পেয়েছেন, 3% লড়াইয়ে যে সমস্যা দেখা দেয় এটি খুব সাধারণ সমস্যা।
চিন্তাবিদ

তারপরে, 3% যুদ্ধে ঘটে যাওয়া দুর্ভাগ্য এখনও দুর্ভাগ্য মাত্র।
এমসাল্টাররা 15-18

0

আমি নিম্নলিখিত "এলোমেলোভাবে বিলম্বিত পুটব্যাক ডাই" প্রস্তাব করব:

  • দুটি অ্যারে বজায় রাখুন, একটি ( in-array) প্রাথমিকভাবে 0 থেকে n-1 পর্যন্ত মানগুলি দিয়ে পূর্ণ, অন্যটি (out-array ) খালি থাকে
  • যখন কোনও ফলাফলের জন্য অনুরোধ করা হয়:
    • এর মধ্যে সমস্ত সংজ্ঞায়িত মান থেকে একটি এলোমেলো মান ফেরত দিনin-array
    • থেকে এই মান সরাতে in-arrayকরতেout-array
    • একটি এলোমেলোভাবে ( অনির্ধারিত সমস্ত উপাদানগুলির উপরে !) উপাদানটিকে out-arrayপিছন থেকে সরিয়ে নিনin-array

এই সম্পত্তি এটি "প্রতিক্রিয়া" হবে ধীরে ধীরে আরো বড় হয়েছে এন হয়। উদাহরণস্বরূপ, আপনি যদি 20% চান চান, এন থেকে 5 সেট করে 0 এবং তার উপর 0 চাপানো "কম র্যান্ডম" হ'ল এন থেকে 10 সেট করে এবং 0 বা 1 তে আঘাত করে, এবং 1000 এর মধ্যে 0 থেকে 199 করে তৈরি করা প্রায় হবে একটি ছোট নমুনা উপর সত্য এলোমেলো থেকে পৃথক। আপনাকে আপনার নমুনা আকারের সাথে এন সামঞ্জস্য করতে হবে ।


0

প্রতিটি খেলোয়াড়ের জন্য একটি এলোমেলো সমালোচনামূলক হিট প্রাক-গণনা করুন ।

// OBJECT
//...
// OnAttack()
//...
c_h = c_h -1;
if ( c_h == 0 ) {
 // Yes, critical hit!
 c_h = random(5) + 1 // for the next time
 // ...
}

0

আমি মনে করি আপনি সম্ভবত ভুল এলোমেলো বিতরণ ফাংশন ব্যবহার করছেন। আপনি সম্ভবত সংখ্যার উপর একটি এমনকি বিতরণ চান না। পরিবর্তে একটি সাধারণ বিতরণ চেষ্টা করুন যাতে সমালোচনামূলক হিটগুলি 'নিয়মিত' হিটগুলির চেয়ে আরও অস্বাভাবিক হয়ে যায়।

আমি জাভা নিয়ে কাজ করি তাই আমি নিশ্চিত নই যে আপনি সি ++ এর জন্য এমন কিছু কোথায় পাবেন যা আপনাকে সাধারণ বন্টন সহ এলোমেলো সংখ্যা দেয় তবে সেখানে কিছু আছে।

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