আমি এলোমেলো সংখ্যা জেনারেশনে "খুব" ভাগ্যবান / দুর্ভাগ্যর ধারাগুলি কীভাবে এড়াব?


30

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

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

এটি না ঘটে তা নিশ্চিত করতে আমি কী করতে পারি? কিছু আরএনজিগুলি পুনরাবৃত্তি এড়াতে অন্যের চেয়ে ভাল?


আমি দেখছি না এটি কীভাবে কাজ করে। অবশ্যই আপনি x1, x2, x3, x4 এর সিকোয়েন্স পেতে চলেছেন .. যেখানে সমস্ত এক্স বড়। যদিও এটি কেবল এলোমেলো নয়?
কমিউনিস্ট হাঁস

উত্তর:


26

আপনি ক্ষতির ফলাফলগুলির পূর্বনির্ধারিত তালিকা তৈরি করে এবং এলোমেলো করে টেট্রিসের মতোই এটি সমাধান করতে পারেন।

ধরা যাক আপনি জানেন যে প্লেয়ার একটি রৈখিক বিতরণ দিয়ে 0.8x থেকে 1.2x ক্ষতি ডিল করতে চলেছে। [0.8, 0.9, 1.0, 1.1, 1.2] তালিকাটি নিন। এলোমেলোভাবে এলোমেলো করুন , যাতে আপনি যেমন [1.2, 1.0, 0.8, 0.9, 1.1] পান।

প্লেয়ারটি প্রথমবার ক্ষতির মুখোমুখি হয়, তারা 1.2x ডিল করে। তারপরে 1x। তারপরে, ইত্যাদি, 1.1x। অ্যারে খালি থাকলে কেবলমাত্র আপনি একটি নতুন অ্যারে তৈরি এবং পরিবর্তন করতে পারবেন।

অনুশীলনে, আপনি সম্ভবত এটি একবারে 4+ অ্যারে করতে চান (উদাহরণস্বরূপ [0.8,0.8,0.8,0.8,0.9,0.9,0.9,0.9, ...] দিয়ে শুরু করুন)। অন্যথায় ক্রমটির সময়কাল যথেষ্ট কম যে খেলোয়াড়রা তাদের পরবর্তী হিট "ভাল" কিনা তা নির্ধারণ করতে পারে is (যদিও এটি লড়াইয়ে আরও কৌশল যোগ করতে পারে, যেমন ড্রাগন কোয়েস্ট নবম হোমি টেবিলে , লোকেরা কীভাবে নিরাময়ের সংখ্যাগুলি দেখে তদন্ত করতে হবে এবং আপনার বিরল ড্রপের গ্যারান্টি না দেওয়া পর্যন্ত টুইট করতে পারে।


3
এটিকে কিছুটা এলোমেলো করে তুলতে আপনার সর্বদা এলোমেলো সংখ্যার হিসাবে অর্ধেক তালিকা থাকতে পারে এবং অন্যান্য অর্ধেকের গড় গণনা করার জন্য (2-x) হিসাবে গণনা করা হয়।
আদম

2
@ অ্যাডাম: এই পদ্ধতিটি কেবলমাত্র এই বিশেষ উদাহরণের জন্য কাজ করে; আপনি যদি ক্ষতির গুণকগুলির পরিবর্তে টেট্রিসের টুকরোগুলি ব্যবহার করে থাকেন তবে 2 - এস ব্লকটি কী?

6
এর জন্য সাধারণ শব্দটি হ'ল সিস্টেমের সাজানো "প্রতিস্থাপন ছাড়াই এলোমেলো"। সত্যই, ডাইসের পরিবর্তে ডেক কার্ডের ডেক ব্যবহারের সাথে এটি সাদৃশ্য।
কাইলোটন

আরও ভাল, আপনি অর্ধেক সংখ্যাটি সত্যই এলোমেলো করতে পারেন এবং কেবলমাত্র অর্ধেকই এই নিয়মের সাপেক্ষে।
o0 '

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

5

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

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

নিম্নলিখিত পিআরএনজি নমুনাগুলি নিন (যেখানে আমরা নমুনাটি = = 0.5 হয় তবে)

Values: 0.1, 0.5, 0.9, 0.4, 0.8
Events: 0  , 1  , 1  , 0  , 1
Percentage: 60%

লক্ষ্য করুন যে প্রতিটি মান চূড়ান্ত ফলাফলের 1/5 অবদান রাখে। আসুন এটি অন্যভাবে দেখুন:

Values: 0.1, 0.5
Events: 0  , 1

লক্ষ্য করুন যে 0মানটির 150% এবং অবদানের 50% অবদান রয়েছে। কিছুটা এগিয়ে নেওয়া:

Values: [0.1, 0.5], 0.9
Events: [0  , 1  ], 1

এখন প্রথম মানগুলি মানের 66% এবং শেষ 33% অবদান রাখে। আমরা নিম্নলিখিত পদ্ধতিতে এটি মূলত নিঃশেষ করতে পারি:

result = // 0 or 1 depending on the result of the event that was just generated
new_samples = samples + 1

average = (average * samples / new_samples) + (result * 1 / new_samples)
// Essentially:
average = (average * samples / new_samples) + (result / new_samples)

// You might want to limit this to, say, 100.
// Leaving it to carry on increasing can lead to unfairness
// if the game draws on forever.
samples = new_samples

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

average = 0.1
desired = 0.5
corrected_chance = 83%

average = 0.2
desired = 0.5
corrected_chance = 71%

average = 0.5
desired = 0.5
corrected_change = 50%

এখন আমার কাছে যা ঘটেছিল তা হ'ল প্রথম উদাহরণে 83% ছিল "0.6 এর মধ্যে 0.5" "(অন্য কথায়" 0.5 এর বাইরে 0.5 প্লাস 0.1 ")। এলোমেলো ইভেন্টের পদগুলির অর্থ যার অর্থ:

procced = (sample * 0.6) > 0.1
// or
procced = (sample * 0.6) <= 0.5

সুতরাং কোনও ইভেন্ট তৈরি করতে আপনি মূলত নিম্নলিখিত কোডটি ব্যবহার করবেন:

total = average + desired
sample = rng_sample() * total // where the RNG provides a value between 0 and 1
procced = sample <= desired

এবং সেইজন্য আপনি কোডটি আমি পেয়েছি যা আমি টুকরো টুকরো করে বলছি। আমি পুরোপুরি নিশ্চিত যে এগুলি সমস্ত এলোমেলো ক্ষয়ক্ষতির ক্ষেত্রে ব্যবহার করা যেতে পারে তবে আমি তা বের করার জন্য সময় নিই না।

দাবি অস্বীকার: এটি সমস্ত গৃহ-পরিসংখ্যান, ক্ষেত্রের আমার কোনও শিক্ষা নেই। আমার ইউনিট পরীক্ষা পাস যদিও।


আপনার প্রথম উদাহরণে একটি ত্রুটি বলে মনে হচ্ছে কারণ 0.1 এবং একটি 0.9 উভয়ই একটি 0 ইভেন্টের ফলাফল। তবে আপনি মূলত ক্রমবর্ধমান চলমান গড় ( en.wikedia.org/wiki/Moving_average#Cumulative_moving_average ) রাখা এবং তার ভিত্তিতে সংশোধন করার বর্ণনা দিচ্ছেন। একটি ঝুঁকি হ'ল প্রতিটি ফলাফল পূর্বের ফলাফলের সাথে উল্লেখযোগ্যভাবে বিপরীতভাবে সম্পর্কিত হবে যদিও সময়ের সাথে এই পারস্পরিক সম্পর্ক হ্রাস পাবে।
কাইলোটন

1
পরিবর্তে একটি 'ফাঁসী ইন্টিগ্রেটার' সিস্টেম ব্যবহার করার জন্য আমি এটি পরিবর্তন করতে প্ররোচিত হব: গড়ের সাথে শুরু করা 0.5 থেকে শুরু করুন এবং নমুনাগুলি গণনা করার পরিবর্তে স্বেচ্ছাসেবী স্থির মান বাছাই করুন (উদা। 10, 20, 50, বা 100) যা বৃদ্ধি পায় না । তারপরে কমপক্ষে 2 পরবর্তী মানগুলির মধ্যে অন্তর্ভুক্তি জেনারেটরের ব্যবহার জুড়ে ধ্রুবক। আপনি ধ্রুবক মানটিও টুইঙ্ক করতে পারেন - বৃহত্তর মানগুলির অর্থ ধীর সংশোধন এবং আরও আপাত এলোমেলো।
কাইলোটন

@ কাইলোটান ধন্যবাদ, নাম দেওয়ার জন্য ধন্যবাদ। আপনার দ্বিতীয় মন্তব্যে আপনি কী বোঝাতে চাইছেন তা আমি নিশ্চিত নই - সম্ভবত কোনও নতুন উত্তর সরবরাহ করবেন?
জোনাথন ডিকিনসন

এটি বেশ চালাক এবং অ্যারের সীমাবদ্ধতা নেই। আমি কাইলোটনের পরামর্শটি বুঝতে পেরেছি, যা samplesতার সর্বোচ্চ মূল্য (এই ক্ষেত্রে, 100) শুরু থেকে শুরু করা। এইভাবে, আরএনজি স্থিতিশীল হতে 99 টি পুনরাবৃত্তি লাগে না। যেভাবেই হোক, এই পদ্ধতির সাথে আমি যে অসুবিধাটি দেখতে পাচ্ছি তা হ'ল এটি ন্যায্যতার গ্যারান্টি দেয় না , এটি কেবল ধ্রুবক গড়কে নিশ্চিত করে।
ব্যবহারকারী খুঁজে পাওয়া যায় নি

@ জেসেপিয়া - প্রকৃতপক্ষে, আপনি এখনও ন্যায়বিচার / অন্যায়তার রান পাবেন তবে সেগুলি (সাধারণত) ভারসাম্যপূর্ণ রান দ্বারা অনুসরণ করা হবে। উদাহরণস্বরূপ আমার ইউনিট পরীক্ষায় আমি 100 জোর করে 'নন-প্রোকস' চাপিয়ে দিয়েছিলাম এবং যখন আমি আসল নমুনাগুলি করি তখন ~ 60 টি প্রোকে আমার সাথে দেখা হয়েছিল। অপ্রয়োজনীয় পরিস্থিতিতে (যদি আপনি কোডটি দেখুন) একটি 50% প্রকোপ সাধারণত দেখায়, সবচেয়ে খারাপভাবে, উভয় দিকেই 2/3 রান করে। তবে একজন খেলোয়াড়ের রান থাকতে পারে যাতে তারা অন্য খেলোয়াড়কে পরাস্ত করতে পারে। আপনি মেলায় দৃঢ়ভাবে এটি আরো পক্ষপাত করতে চান: total = (average / 2) + desired
জোনাথন ডিকিনসন

3

আপনি যা চাইছেন তা আসলে বেশিরভাগ পিআরএনজির বিপরীত, একটি অ-লিনিয়ার বিতরণ। আপনার বিধিগুলিতে কিছুটা হ্রাসকারী রিটার্ন যুক্তি যুক্ত করুন, ধরে নিই যে 1.0x এর উপরে সমস্ত কিছু একটিরকমের "সমালোচনামূলক আঘাত", কেবলমাত্র এটিই বলুন যে প্রতিটি রাউন্ডে আপনার একটি সমালোচক এক্সের দিকে এগিয়ে যাওয়ার সম্ভাবনা রয়েছে, যতক্ষণ না আপনি একটি পেয়ে যান কোন ওয়াইডে তারা ওয়াই-তে রিসেট হয় You


1
এটি আমি গ্রহণ করি না এমন সাধারণ পদ্ধতি, আপনি আরএনজির অভিন্ন বিতরণ ব্যবহার করেন তবে রূপান্তর করেন। আপনি আরআনজির আউটপুটটিকে আপনার নিজস্ব কাস্টম বিতরণে একটি ইনপুট হিসাবে ব্যবহার করতে পারেন যা সাম্প্রতিক ইতিহাসের ভিত্তিতে নিজেকে পুনরায় সামঞ্জস্য করে, অর্থাৎ আউটপুটগুলিতে বৈকল্পিকতা জোর করার জন্য, যাতে এটি মানুষের উপলব্ধি পদগুলিতে "আরও এলোমেলো" দেখায়।
মাইকেল 2

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

একটি ভাল অ্যালগের মতো শোনাচ্ছে, দীর্ঘ শুকনো মণি সর্বদা হতাশাব্যঞ্জক হয়ে পড়েছে তবে এটি সমালোচকদের পাগল ধারাগুলিতে নেতৃত্ব দেয় না।
মাইকেল 2

2
এটিকে ঠিক করার জন্য একটি অ-লাইন বিতরণ প্রয়োজন হয় না, কেবলমাত্র এটি প্রয়োজন যে বিতরণের স্বল্প সময়ের-অনুক্রমিক উপগ্রহগুলি বিতরণ হিসাবে একই বৈশিষ্ট্য রয়েছে।

কিভাবে এই শিলাপাতপূর্ণ ঝড় গেম এটা করতে, অন্তত যেহেতু কৌশল 3
dreta

2

সিড মেয়ারের এই বিষয় এবং সভ্যতার গেমগুলি সম্পর্কে জিডিসি 2010 তে একটি দুর্দান্ত বক্তব্য ছিল। আমি পরে লিঙ্কটি খুঁজে বের করার চেষ্টা করব try সংক্ষেপে - অনুভূত এলোমেলোতা সত্য এলোমেলো হিসাবে একই নয়। জিনিসগুলি ন্যায্য মনে করার জন্য আপনাকে পূর্ববর্তী ফলাফলগুলি বিশ্লেষণ করতে হবে এবং খেলোয়াড়দের মনোবিজ্ঞানের দিকে মনোযোগ দেওয়া উচিত।

দুর্ভাগ্যর রেখাগুলি সর্বদাই এড়িয়ে চলুন (যদি আগের দুটি পালা দুর্ভাগ্য হয় তবে পরবর্তী ভাগ্যবান হওয়ার নিশ্চয়তা দেওয়া উচিত)। প্লেয়ার এআই প্রতিপক্ষের চেয়ে সর্বদা ভাগ্যবান হওয়া উচিত।


0

একটি স্থানান্তর পক্ষপাত ব্যবহার করুন

বেস জেনারেটর জেনারেট করতে এবং মধ্যে অভিন্ন বিতরণ ব্যবহার করে । প্রাথমিকভাবে একটি বায়াস মান, , ।01rb0

নিম্নলিখিত সূত্র দ্বারা সামগ্রিক বিতরণ পক্ষপাতমূলক হবে:

rexp(b)

এখানে প্রভাবটি হ'ল যখন ইতিবাচক হয়, ফলস্বরূপ সংখ্যাটি দিকে পক্ষপাতযুক্ত হবে । যখন নেতিবাচক হয়, ফলাফল সংখ্যা পক্ষপাতদুষ্ট হবে ।b1b0

এই নম্বরটি নিন এবং এটি পছন্দসই পরিসরে যথাযথভাবে স্কেল করুন।

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

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