একক-বিজয়ী নির্বাচনের জন্য সর্বাধিক সাধারণ ভোটদানের একটি হল বহুবচন ভোটদান পদ্ধতি। সহজ কথায় বলতে গেলে সর্বাধিক ভোটের প্রার্থী জয়লাভ করে। বহুত্ববোধ ভোটিংটি গাণিতিকভাবে নিরবচ্ছিন্ন এবং এমন পরিস্থিতি তৈরি করতে বাধ্য যে ভোটাররা তাদের সত্যিকারের প্রার্থীর বিপরীতে "দু'দুটির কম" পক্ষে ভোট দিতে পরিচালিত হয়।
এই গেমটিতে আপনি এমন প্রোগ্রাম লিখবেন যা বহুত্বের ভোটদান ব্যবস্থার সুযোগ নেয়। এটি নির্বাচনে তিনজন প্রার্থীর মধ্যে একজনকে ভোট দেবে। প্রতিটি প্রার্থী নিজের জন্য একটি নির্দিষ্ট পরিশোধের সাথে যুক্ত এবং আপনার লক্ষ্য আপনার প্রত্যাশিত শোধকে সর্বাধিক করে তোলা।
ভাতা "অবিশেষে" এলোমেলোভাবে, বিতরণ করা হয় প্রতিটি নির্বাচন দিয়ে পরিবর্তন এবং তা 100 প্রার্থী যোগ একজন 40 প্রতিদান হতে পারে প্রার্থী বি প্রতিদান 27 হতে পারে, এবং প্রার্থীদের সি 33. প্রতিদান প্রতিটি খেলোয়াড় ভাতা একটি ভিন্ন সেট আছে ফেলতে পারে।
যখন আপনার ভোট দেওয়ার পালা হবে তখন আপনার কাছে অসম্পূর্ণ তথ্য থাকবে। নীচে তালিকাভুক্ত তথ্য আপনার কাছে উপলব্ধ থাকবে। যেহেতু আপনি জানেন না যে অন্য খেলোয়াড়ের স্বতন্ত্র অর্থ প্রদানগুলি কী, তাই বর্তমান নির্বাচনের ফলাফলের ফলে তারা কীভাবে ভোট দেবে তা অনুমান করা আপনার চ্যালেঞ্জ হবে।
- এখনও পর্যন্ত নির্বাচনের আংশিক ফলাফল
- প্রবেশকারীদের সংখ্যা (নিজেকে বাদ দিয়ে), যারা এখনও ভোট দেয়নি
- প্রতিটি প্রার্থীর জন্য আপনার ব্যক্তিগত পরিশোধ
- প্রার্থীদের প্রত্যেকের জন্য মোট গ্রুপ পরিশোধ
প্রতিটি খেলোয়াড়কে ভোট দেওয়ার সুযোগ দেওয়ার পরে, সর্বাধিক ভোটের প্রার্থী বহুবচন ভোটদান অনুসারে জয়লাভ করে। তারপরে প্রতিটি খেলোয়াড় সেই পয়েন্টের সংখ্যা পান যা ওই প্রার্থীর কাছ থেকে তাদের পরিশোধের সাথে সামঞ্জস্য হয়। ভোটে যদি টাই থাকে, তবে নির্ধারিত পয়েন্টের সংখ্যাটি বাঁধা প্রার্থীদের গড় হবে।
টুর্নামেন্ট কাঠামো
প্রথম তাত্ক্ষণিকভাবে প্রবেশ করাতে, প্রবেশকারীকে টুর্নামেন্টে অনুষ্ঠিত নির্বাচনের সংখ্যা জানানো হবে। আমি অত্যন্ত সংখ্যক নির্বাচন পরিচালনা করার চেষ্টা করব। তারপরে, প্রতিটি নির্বাচন একের পর এক অনুষ্ঠিত হবে।
প্রবেশকারীদের রদবদল করার পরে, প্রত্যেককে ভোট দেওয়ার পালা দেওয়া হয়। তাদের উপরে তালিকাভুক্ত সীমিত তথ্য দেওয়া হবে এবং তাদের ভোটের ইঙ্গিত দিয়ে একটি নম্বর ফিরিয়ে দেওয়া হবে। প্রতিটি নির্বাচন শেষ হওয়ার পরে, প্রতিটি বটকে চূড়ান্ত জরিপের ফলাফল এবং সেই নির্বাচন থেকে তাদের স্কোর বৃদ্ধি দেওয়া হয়।
বিপুল সংখ্যক নির্বাচন অনুষ্ঠিত হওয়ার পরে বিজয়ী প্রবেশকারী সর্বোচ্চ স্কোরের সাথে এক হবে। নিয়ামক এলোমেলোভাবে ভোটদানের জন্য ভবিষ্যদ্বাণী করা স্কোর বন্টনের সাথে তার স্কোরকে তুলনা করে প্রতিটি প্রতিযোগীর জন্য একটি "নরমালাইজড" স্কোর গণনা করে।
জমা দেওয়ার বিবরণ
জমাগুলি জাভা 8 ক্লাসের রূপ নেবে। প্রতিটি প্রবেশকারীকে নিম্নলিখিত ইন্টারফেসটি প্রয়োগ করতে হবে:
public interface Player
{
public String getName();
public int getVote(int [] voteCounts, int votersRemaining, int [] payoffs, int[] totalPayoffs);
public void receiveResults(int[] voteCounts, double result);
}
- আপনার কনস্ট্রাক্টরকে
int
প্যারামিটার হিসাবে একক নেওয়া উচিত , যা অনুষ্ঠিত নির্বাচনের সংখ্যার প্রতিনিধিত্ব করবে। getName()
পদ্ধতি নাম লিডারবোর্ডে ব্যবহৃত হতে পারে ফেরৎ। এটি আপনাকে সুন্দর-ফর্ম্যাট করা নাম রাখতে দেয়, কেবল ক্রেজিও না।getVote(...)
পদ্ধতি আয়0
,1
অথবা2
বোঝান যা প্রার্থী ভোট পাবেন।receiveResults(...)
পদ্ধতি আরো জটিল কৌশল যে ঐতিহাসিক ডেটা ব্যবহার অস্তিত্ব সক্ষম করতে প্রধানত হয়।- আপনি প্রদত্ত তথ্য রেকর্ড করতে এবং প্রক্রিয়া করতে চান এমন কোনও অন্য পদ্ধতি / উদাহরণ ভেরিয়েবলগুলি তৈরি করতে আপনাকে অনুমোদিত allowed
টুর্নামেন্ট চক্র, প্রসারিত
- প্রবেশকারীদের প্রতিটি সঙ্গে তাত্ক্ষণিক হয়
new entrantName(int numElections)
। - প্রতিটি নির্বাচনের জন্য:
- নিয়ামক এলোমেলোভাবে এই নির্বাচনের জন্য প্রতিটি খেলোয়াড়ের প্রদানের পরিমাণ নির্ধারণ করে। এর জন্য কোডটি নীচে দেওয়া হল। তারপরে, এটি খেলোয়াড়দের বদলে দেয় এবং তাদের ভোটদান শুরু করে।
- প্রবেশক এর পদ্ধতি
public int getVote(int [] voteCounts, int votersRemaining, int [] payoffs, int[] totalPayoffs)
প্রার্থনা করা হয়, এবং প্রবেশক তাদের ভোট আয়0
,1
অথবা2
নিজেদের পছন্দের প্রার্থী। - প্রবেশকারীদের
getVote(...)
পদ্ধতি যা বৈধ ভোট ফেরত দেয় না তাদের এলোমেলো ভোট দেওয়া হবে। - সবাই ভোট দেওয়ার পরে, নিয়ামক বহুত্ব পদ্ধতিতে নির্বাচনের ফলাফল নির্ধারণ করে।
- প্রবেশকারীদের চূড়ান্ত ভোটের গণনা এবং তাদের পদ্ধতিটি কল করে তাদের পরিশোধের বিষয়ে অবহিত করা হয়
public void receiveResults(int[] voteCounts, double result)
।
- সমস্ত নির্বাচন অনুষ্ঠিত হওয়ার পরে, বিজয়ী হ'ল সর্বোচ্চ স্কোর।
পেওফসের র্যান্ডম বিতরণ
সঠিক বন্টন গেমপ্লের উপর উল্লেখযোগ্য প্রভাব ফেলবে না। আমি একটি বড় স্ট্যান্ডার্ড বিচ্যুতি (প্রায় 23.9235) দিয়ে একটি বিতরণ বেছে নিয়েছি এবং এটি খুব উচ্চ এবং খুব কম উভয়ই শুল্ক তৈরি করতে সক্ষম। আমি পরীক্ষা করে দেখেছি যে তিনটি পে-অফের প্রত্যেকটিরই এক রকম বিতরণ রয়েছে।
public int[] createPlayerPayoffs()
{
int cut1;
int cut2;
do{
cut1 = rnd.nextInt(101);
cut2 = rnd.nextInt(101);
} while (cut1 + cut2 > 100);
int rem = 100 - cut1 - cut2;
int[] set = new int[]{cut1,cut2,rem};
totalPayoffs[0] += set[0];
totalPayoffs[1] += set[1];
totalPayoffs[2] += set[2];
return set;
}
আরও বিধি
এখানে আরও কিছু সাধারণীকরণ করা বিধি রয়েছে।
- আপনার প্রোগ্রামটি অবশ্যই নিয়ন্ত্রকের কোনও অংশ বা অন্য প্রবেশকারীদের বা তাদের স্মৃতিগুলির চালনা / সংশোধন / তাত্ক্ষণিকভাবে চালানো উচিত নয়।
- যেহেতু আপনার প্রোগ্রামটি পুরো টুর্নামেন্টের জন্য "লাইভ" থাকে তাই কোনও ফাইল তৈরি করবেন না।
- অন্য কোনও প্রবেশকারী প্রোগ্রামের সাথে ইন্টারঅ্যাক্ট, সহায়তা বা টার্গেট করবেন না।
- আপনি পারে একাধিক সমাগম জমা দেবেন, যতদিন তারা যুক্তিসঙ্গতভাবে আলাদা, এবং যতদিন আপনি উপরে নিয়ম অনুসরণ।
- আমি একটি নির্দিষ্ট সময়সীমা নির্দিষ্ট করে নেই, তবে আমি রান টাইমের প্রশংসা করব যা কল প্রতি এক সেকেন্ডের তুলনায় উল্লেখযোগ্যভাবে কম। আমি যতটা সম্ভব নির্বাচন পরিচালনা করতে সক্ষম হতে চাই।
নিয়ামক
নিয়ামক এখানে পাওয়া যাবে । মূল প্রোগ্রামটি হ'ল Tournament.java
। দুটি সহজ বটও রয়েছে, যা প্রতিযোগিতা করবে, শিরোনাম হবে RandomBot
এবং PersonalFavoriteBot
। আমি একটি উত্তরে এই দুটি বট পোস্ট করব।
লিডারবোর্ড
দেখে মনে হচ্ছে এক্সপ্যাক্ট্যান্টবট বর্তমান নেতা, তারপরে মন্টি কার্লো এবং তারপরে স্টাবট।
Leaderboard - 20000000 elections:
767007688.17 ( 937.86) - ExpectantBot
766602158.17 ( 934.07) - Monte Carlo 47
766230646.17 ( 930.60) - StatBot
766054547.17 ( 928.95) - ExpectorBot
764671254.17 ( 916.02) - CircumspectBot
763618945.67 ( 906.19) - LockBot
763410502.67 ( 904.24) - PersonalFavoriteBot343
762929675.17 ( 899.75) - BasicBot
761986681.67 ( 890.93) - StrategicBot50
760322001.17 ( 875.37) - Priam
760057860.67 ( 872.90) - BestViableCandidate (2842200 from ratio, with 1422897 tie-breakers of 20000000 total runs)
759631608.17 ( 868.92) - Kelly's Favorite
759336650.67 ( 866.16) - Optimist
758564904.67 ( 858.95) - SometimesSecondBestBot
754421221.17 ( 820.22) - ABotDoNotForget
753610971.17 ( 812.65) - NoThirdPartyBot
753019290.17 ( 807.12) - NoClueBot
736394317.17 ( 651.73) - HateBot670
711344874.67 ( 417.60) - Follower
705393669.17 ( 361.97) - HipBot
691422086.17 ( 231.38) - CommunismBot0
691382708.17 ( 231.01) - SmashAttemptByEquality (on 20000000 elections)
691301072.67 ( 230.25) - RandomBot870
636705213.67 ( -280.04) - ExtremistBot
The tournament took 34573.365419071 seconds, or 576.2227569845166 minutes.
এখানে কিছু পুরানো টুর্নামেন্ট রয়েছে, তবে এই রানগুলির পরে কোনওটিরই কার্যকারিতা পরিবর্তন হয়নি।
Leaderboard - 10000000 elections:
383350646.83 ( 661.14) - ExpectantBot
383263734.33 ( 659.99) - LearnBot
383261776.83 ( 659.97) - Monte Carlo 48
382984800.83 ( 656.31) - ExpectorBot
382530758.33 ( 650.31) - CircumspectBot
381950600.33 ( 642.64) - PersonalFavoriteBot663
381742600.33 ( 639.89) - LockBot
381336552.33 ( 634.52) - BasicBot
381078991.83 ( 631.12) - StrategicBot232
380048521.83 ( 617.50) - Priam
380022892.33 ( 617.16) - BestViableCandidate (1418072 from ratio, with 708882 tie-breakers of 10000000 total runs)
379788384.83 ( 614.06) - Kelly's Favorite
379656387.33 ( 612.31) - Optimist
379090198.33 ( 604.83) - SometimesSecondBestBot
377210328.33 ( 579.98) - ABotDoNotForget
376821747.83 ( 574.84) - NoThirdPartyBot
376496872.33 ( 570.55) - NoClueBot
368154977.33 ( 460.28) - HateBot155
355550516.33 ( 293.67) - Follower
352727498.83 ( 256.36) - HipBot
345702626.33 ( 163.50) - RandomBot561
345639854.33 ( 162.67) - SmashAttemptByEquality (on 10000000 elections)
345567936.33 ( 161.72) - CommunismBot404
318364543.33 ( -197.86) - ExtremistBot
The tournament took 15170.484259763 seconds, or 252.84140432938332 minutes.
এক্সপেক্টেন্টবটের নেতৃত্বের বিষয়টি নিশ্চিত করে আমি দ্বিতীয় দশ মিটার টুর্নামেন্টও চালিয়েছিলাম।
Leaderboard - 10000000 elections:
383388921.83 ( 661.65) - ExpectantBot
383175701.83 ( 658.83) - Monte Carlo 46
383164037.33 ( 658.68) - LearnBot
383162018.33 ( 658.65) - ExpectorBot
382292706.83 ( 647.16) - CircumspectBot
381960530.83 ( 642.77) - LockBot
381786899.33 ( 640.47) - PersonalFavoriteBot644
381278314.83 ( 633.75) - BasicBot
381030871.83 ( 630.48) - StrategicBot372
380220471.33 ( 619.77) - BestViableCandidate (1419177 from ratio, with 711341 tie-breakers of 10000000 total runs)
380089578.33 ( 618.04) - Priam
379714345.33 ( 613.08) - Kelly's Favorite
379548799.83 ( 610.89) - Optimist
379289709.83 ( 607.46) - SometimesSecondBestBot
377082526.83 ( 578.29) - ABotDoNotForget
376886555.33 ( 575.70) - NoThirdPartyBot
376473476.33 ( 570.24) - NoClueBot
368124262.83 ( 459.88) - HateBot469
355642629.83 ( 294.89) - Follower
352691241.83 ( 255.88) - HipBot
345806934.83 ( 164.88) - CommunismBot152
345717541.33 ( 163.70) - SmashAttemptByEquality (on 10000000 elections)
345687786.83 ( 163.30) - RandomBot484
318549040.83 ( -195.42) - ExtremistBot
The tournament took 17115.327209018 seconds, or 285.25545348363335 minutes.
Array
সমস্ত ভোটের একটি গণনা। আমি কি সঠিক?