ক্রোস্যান্টগুলি কেনার পালা তা সন্ধান করুন


9

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

সীমাবদ্ধতা, অনুমান এবং উদ্দেশ্য:

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

এটি একটি বাস্তব বিশ্বের সমস্যার একটি মডেল, সুতরাং আপনি যদি ধারণা করেন যে তারা দৃশ্যের আরও ভালভাবে মডেল করে।

উত্স: যারা ক্রয়স্যান্ট কিনতে যাচ্ছি চলছে তা খুঁজুন দ্বারা ফ্লোরিয়ান Margaine । আমার সংস্কারের এখানে কিছুটা আলাদা প্রয়োজন রয়েছে।


1
প্রশ্নটি আসলে কী ছিল? আমরা কি ধরে নিতে পারি যে লোকেরা একই পরিমাণে কম-বেশি অনুপস্থিত রয়েছে? যে ব্যক্তি সবচেয়ে কম সংখ্যক বার এটি করেছে বা কেবল এলোমেলোভাবে লোক এনেছে তাতে কী ভুল?
পল জিডি

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

কি? নোনা ছবি? আপনি চান যে আমরা আমাদের ডেস্কে বেকারিতে পিছলে যাওয়ার পরিবর্তে গণিতগুলি করব ?
কালেব

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

উত্তর:


7

এই ধরণের সমস্যার দুটি ধরণের সমাধান রয়েছে যার সম্পর্কে আমি অবগত: পক্ষপাতদু লটারি এবং ফিল্টারড / জেনারেটেড এলোমেলো ক্রম

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

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

সুতরাং, সমাধান দুটি ধরণের।

  1. পক্ষপাতদুষ্ট লটারি তৈরির জন্য, প্রথমে নোট করুন যে আমরা আমাদের লটারির জন্য নম্বর উত্পন্ন করতে কোনও ক্রমাগত বিতরণ (সীমাবদ্ধ বিচ্যুতি সহ) থেকে বেছে নিতে পারি । হেরে যাওয়া ব্যক্তি তখন সর্বনিম্ন সংখ্যাযুক্ত ব্যক্তি হতে পারে। তারপরে সহজ পক্ষপাত হ'ল প্রতিটি ব্যক্তি তাদের অংশের চেয়ে কম-বেশি কেনে কি না তা ট্র্যাক করে রাখা। আপনি ক্রোসেন্টগুলির ইউনিটগুলিতে পক্ষপাতটি পরিমাপ করতে পারেন। আপনি বিতরণের প্রস্থ এবং আকৃতি পরিবর্তন করে এলোমেলোতার ডিগ্রিটি টিউন করতে পারেন - এটি নির্ধারণ করবে যে কোনও ব্যক্তি "একই সংখ্যার বার" থেকে কত দূরে যেতে পারে। গাউসিয়ানরা সহজ; তারা খুব দীর্ঘ ("অন্যায্য") লেজ না থাকলে যুক্তিসঙ্গত বিস্ময়ের অনুমতি দেয়। সুতরাং সমাধানের মূল আকৃতিটি (স্কাল কোডে)

    case class Employee(var bias: Double) {
      def eat         { bias -= 1 }
      def buy(n: Int) { bias += n }
      def roll        = bias + stdev * Random.nextGaussian
    }
    

    কে সর্বশেষ কিনেছিল তার উপর নজর রাখতে পারেন 10*stdevএবং প্রান্তের ক্ষেত্রে যেখানে অবকাশের কাঠামোতে প্রত্যেককে "শেষ" সময় কেনার অনুমতি দেওয়া হয়েছিল সেখানে লোকেরা পর পর দু'বার কেনা থেকে বিরত রাখতে একটি বিশাল পক্ষপাতিত্ব বোনাস (উদাঃ ) দিতে পারেন। (যেমন আপনি কিনেছেন, তারপরে ছুটিতে যান)) তারা নির্বাচিত হওয়ার দিন উপস্থিত না থাকার জন্য একই জিনিস। (যদি প্রতিদিন অন্য কেউ অনুপস্থিত থাকে তবে অবশেষে তারা তাদের পক্ষপাতিত্ব বোনাসের মাধ্যমে জ্বলে উঠলে তারা উপস্থিত হবে ; আমি এটিকে বাগের চেয়ে বৈশিষ্ট্য হিসাবে বিবেচনা করি))

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

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

    আপনি যদি কোনও স্ট্যান্ডার্ড শ্যাফেল ব্যবহার করেন, কোনও ছুটি না থাকলে এলোমেলো পরিমাণ নির্ধারণ করা বিশেষত সহজ। আপনি যদি জনগণকে এলোমেলোভাবে পুরোপুরি বেছে নিয়ে থাকেন তবে পরবর্তী কে আসবেন সে সম্পর্কে জ্ঞান থাকবেlog2(N) যদি তথ্য বিট ছিল Nকর্মচারী। পরিবর্তে, তবে, শুধুমাত্রN! পরিবর্তে NN সম্ভাব্য ক্রম অনুমোদিত, তাই তথ্য দ্বারা হ্রাস করা হয় log2[(N!NN)1/N]1log(2)+log22π/NN1.4 বিটস (বড় জন্য N; জন্যN=10 এটা  1.14)।

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


4

দিন {P1,...,Pn}ক্রোস্যান্টের বাইরের সেট হোন। দিনvik1 ব্যয় করা পরিমাণ হতে Pi দিন অবধি ক্রাইস্যান্টে k(এটি ক্রোস্যান্ট কেনার সময় হতে পারে যদি তারা সর্বদা একই পরিমাণ অর্থ ব্যয় করে থাকে তবে যে পরিমাণ লোক উপস্থিত থাকুক না কেন, যারা আমাদের ক্রোসেন্ট প্রেমীদের পক্ষে যথেষ্ট চালাক বলে মনে হয় না); দ্য1 আরম্ভের জন্য এবং দ্বারা বিভাগ এড়ানোর জন্য 0

কিছু পরামিতি জন্য l, দিন vk=i=1n(vik)l

দিনের বেলা k, তারা ফলাফলটি এলোমেলো পরিবর্তনশীলকে গুলি করে পরবর্তী দিনের ক্রোস্যান্ট ক্রেতা চয়ন করে i সম্ভাবনা সহ 1(vik)lvk। যদি নির্বাচিত ব্যক্তি এখানে না থাকে (আজ বা পরশু) তারা একটি উপযুক্ত সন্ধান না পাওয়া পর্যন্ত তারা আবার মুদ্রা টস করে (তিনি উপস্থিত আছেন, কারণ তারা বেশিরভাগই এখানে প্রতিদিন ...)।

এবং তারা এটি খুঁজে না পাওয়া পর্যন্ত সুখে বসবাস করেছিল P1, সেই কাপুরুষ ছিল, কেবল একদিন দু'জনের ওপরে, এবং তাই কখনও কোনও ক্রোস্যান্ট কিনে না!

কিছু প্রতিবিম্ব পরে (এবং এটি উপর কিছুটা অত্যাচার হতে পারে) P1 যাতে তিনি কোনও ক্রোয়েস্টকে পরিশোধ না করেই খেয়ে দেন) তারা তাদের অ্যালগোরিদমকে সংশোধন করে।

তারা প্রতিদিন ক্রোয়েসেন্টের গড় মূল্য গণনা করে এবং কল করে v

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

তারা পরিকল্পনা করে, যতক্ষণ না Pi ভবিষ্যতে তার একটি তারিখ রয়েছে যেখানে তার ক্রোস্যান্ট কেনা উচিত।

যদি Pi দিনটিতে ক্রাইস্যান্ট কেনার পরিকল্পনা করা হয়েছিল k+1 কিন্তু ঘোষণা করে যে সেদিন পারে না k (বা যদি তাকে উষ্ণ করা হয় না) তিনি উপস্থিত কাউকে তার জায়গা দেন যার পরের দিনটির কোনও বাধ্যবাধকতা নেই যেমন Pj এবং তিনি পরবর্তী পালা নিন Pj

যেদিন প্রথমটি Pi ভবিষ্যতে ক্রোস্যান্ট কেনার পরিকল্পনা করা হয়নি, তারা তাদের পরিকল্পনা দীর্ঘায়িত করে (এলোমেলো ভেরিয়েবলের সাথে গণনা করে) vik যতক্ষণ না প্রত্যেকে লাইনে ফিরে না আসে ততক্ষণ তারা প্রদত্ত আসল পরিমাণ এবং পরিকল্পনার পরিমাণটিতে আপডেট হয়েছে।

এবং যখন এটি চিরকাল স্থায়ী হয়, তারা খুশি থাকে, সমানভাবে ক্রাইস্যান্টের দাম ভাগ করে দেয়।

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

এখনো P1 তিনি খুশি নন, তিনি সেখানে কেবলমাত্র অর্ধেক দিন (ক্রোয়েসেন্টের অর্ধেক) এবং তার হিসাবে যতটা দিতে হবে P2প্রতিদিন এখানেই। অন্যায়!

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

PS: খারাপ ইংরেজির জন্য দুঃখিত তবে আমি নেটিভ স্পিকার নই এবং দেরি হয়ে গেছে ... দয়া করে ভুলগুলি সংশোধন করতে দ্বিধা বোধ করুন (এবং গল্পটিতে এত মশলা যুক্ত হতে পারে ...)


2

আপনার প্রতিটি পুনরাবৃত্তি

  • উপস্থিত এবং কেনার জন্য উপলব্ধ লোকদের একটি তালিকা
  • আগের ক্রেতা

যদি আপনি তালিকার লোকদের মধ্যে এলোমেলোভাবে কোনও ব্যক্তিকে বেছে নেন এবং পূর্ববর্তী ক্রেতা বাদ দেন তবে আপনি আপনার লক্ষ্যগুলি অর্জন করেন:

  1. আমরা পূর্ববর্তী পুনরাবৃত্তি থেকে ন্যূনতম পরিমাণের তথ্য ব্যবহার করি এবং এলোমেলোভাবে চয়ন করি বলে অ্যালগরিদমটি "সর্বাধিক" র্যান্ডম ।
  2. গড়ে লোকেরা প্রত্যেকবার (N / (N-1)) ক্রোসেন্টদের জন্য যখনই তারা কোনও অ্যালগরিদমকে যথাসম্ভব ন্যায্য করে তুলতে কোনও অংশ গ্রহণে অংশ নেয়।
  3. আমি এটিকে সর্বাধিক এলোমেলো করে তুলতে নো-রিপিট নিয়মটি দূর করার পরামর্শ দেব।

আমি প্রস্তাবিত অন্যান্য অ্যালগরিদমগুলি কম এলোমেলো বা কম ফর্সা:

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

  2. "কমপেনসিটিভ" অ্যালগরিদমগুলি যা সক্রিয়ভাবে সবাইকে এলোমেলো সংখ্যার বৈশিষ্ট্যের উপর নির্ভর করার পরিবর্তে একই সংখ্যক ক্রাইস্যান্ট পেতে চেষ্টা করে তা এলোমেলো বা ন্যায্য (বা উভয়) হতে ব্যর্থ হয়।


সঙ্গে N মানুষ এবং m কর্মচারীরা প্রতিদিন গড়ে উপস্থিত থাকেন, সময়ের সংখ্যায় বিচ্যুতি প্রায় হবে be N/m। যেহেতু সমাধানগুলি বিদ্যমান যেগুলি এর চেয়ে বেশি বিচ্যুত হয় না1, এটি "ফর্সা" এর একটি অদ্ভুত সংজ্ঞা (বিশেষত যেহেতু এটি "বহুবার" হিসাবে নির্দিষ্ট করা হয়েছিল)।
রেক্স কের

Nক্রয়, অবশ্যই, মানুষ না।
রেক্স কের

@ রেক্সেরের আপনি কর্মীদের চেয়ে ক্রোস্যান্ট কেন কিনবেন?
Sklivvz

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