বিদ্যালয়ের সময়সূচি তৈরির জন্য অ্যালগরিদম


96

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

আমি অনুমান করি যে সম্ভবত এটির জন্য কোনও সঠিক অ্যালগরিদম নেই তবে সম্ভবত এটির উন্নতির জন্য কেউ একটি ভাল অনুমান বা ইঙ্গিত জানে।


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

10
স্ট্যাকওভারফ্লোয়ের ইয়ান রিংরোজ যেমন অন্য একটি প্রশ্নে বলেছিলেন, "নির্ধারিত সফ্টওয়্যারটিতে এখনও অনেকগুলি পিএইচডি থাকতে হবে।"
রিড ডেবায়েস

উত্তর:


89

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

একটি নিশ্চিতকরণ যে এটি উভয়ই একটি কঠিন সমস্যা এবং যার জন্য লোকেরা বার্ষিকভাবে সমাধান চান, এটি (বেশিরভাগ বাণিজ্যিক) সফ্টওয়্যার শিডিয়ুলিং সরঞ্জামগুলির (দীর্ঘ) তালিকাটি পরীক্ষা করা

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

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

  • সমস্ত জ্ঞাত প্রতিবন্ধকগুলি নির্ধারণ এবং র‌্যাঙ্কিং
  • ম্যানুয়ালি, অতিরিক্ত বাধাগুলির একটি সেট সরবরাহ করে সমস্যার স্থান হ্রাস করা ।
    এটি পাল্টা স্বজ্ঞাত বলে মনে হতে পারে তবে উদাহরণস্বরূপ, প্রাথমিকভাবে আংশিকভাবে পূর্ণ সময়সূচী সরবরাহ করে (প্রায় 30% সময় স্লট বলুন) এমনভাবে যা সমস্ত প্রতিবন্ধকতাগুলিকে পুরোপুরি সন্তুষ্ট করে এবং এই আংশিক সময়সূচিটিকে অপরিবর্তনীয় বিবেচনা করে আমরা উল্লেখযোগ্যভাবে হ্রাস করতে পারি প্রার্থীদের সমাধান উত্পাদন করতে প্রয়োজনীয় সময় / স্থান।
    অতিরিক্ত বাধা সহায়তার আরেকটি উপায় হ'ল উদাহরণস্বরূপ "কৃত্রিমভাবে" একটি সীমাবদ্ধতা যুক্ত করা যা সপ্তাহের কিছু দিন কিছু বিষয় পড়াতে বাধা দেয় (যদি এটি সাপ্তাহিক সময়সূচি হয় ...); এই ধরণের প্রতিবন্ধকতার ফলে উল্লেখযোগ্য সংখ্যক ভাল প্রার্থীকে বাদ দিয়ে সমস্যা / সমাধানের স্থানগুলি হ্রাস করে।
  • সমস্যার সীমাবদ্ধতার কিছু দ্রুত গণনা করা যায় তা নিশ্চিত করে। এটি প্রায়শই সমস্যার প্রতিনিধিত্ব করতে ব্যবহৃত ডেটা মডেল নির্বাচনের সাথে যুক্ত; ধারণাটি হ'ল বিকল্পগুলির কয়েকটি দ্রুত অপ্ট-আপ করতে (বা ছাঁটাই করা) able
  • সমস্যার পুনরায় সংজ্ঞা দেওয়া এবং কয়েকটি প্রতিবন্ধকতা ভাঙ্গতে দেওয়া, কয়েকবার, (সাধারণত গ্রাফের শেষ নোডের দিকে)। এখানে ধারণাটি হ'ল হয় তফসিলের শেষ কয়েকটি স্লটগুলিতে পূরণের জন্য কিছু বাধা অপসারণ করা বা স্বয়ংক্রিয় শিডিয়াল জেনারেটর প্রোগ্রামটি পুরো শিডিউলটি শেষ করতে লজ্জা পাবে, পরিবর্তে আমাদেরকে এক ডজন বা এত প্রশংসনীয় একটি তালিকা সরবরাহ করবে instead প্রার্থী. একটি মানুষ প্রায়শই ধাঁধাটি সম্পন্ন করার জন্য আরও ভাল অবস্থানে থাকে, যেমনটি ইঙ্গিত করা হয়েছে, সম্ভবত কয়েকটি বাধা ভেঙে এমন তথ্য ব্যবহার করে যা সাধারণত স্বয়ংক্রিয় যুক্তির সাথে ভাগ হয় না (যেমন "বিকালে কোনও গণিত নয়" নিয়মটি উপলক্ষ্যে ভাঙা যায় "অ্যাডভান্সড ম্যাথ এবং ফিজিক্স" ক্লাসের জন্য; বা "মিঃ স্মিথের একজনের চেয়ে মিঃ জোনসের প্রয়োজনীয়তা ভেঙে দেওয়া ভাল ... ;-))

এই উত্তরটির প্রুফ-রিডিংয়ের সময় আমি বুঝতে পারি যে এটি একটি নির্দিষ্ট প্রতিক্রিয়া সরবরাহ করতে বেশ লজ্জাজনক, তবে এটি বাস্তব পরামর্শগুলিতে কম নয়। আমি আশা করি এই সাহায্যটি, সর্বোপরি, একটি "কঠিন সমস্যা"।


4
দুর্দান্ত, নির্ভুল এবং বিস্তৃত উত্তর, এনপি-সম্পূর্ণতা সম্পর্কে ইঙ্গিতগুলির জন্য এবং উল্লেখ করার জন্য ধন্যবাদ (এটি আমার ধারণাও ছিল))
মোম

4
আপনার কাছে এমন কোনও প্রশংসা আছে যা এই সমস্যার এনপি-পূর্ণতা ব্যাখ্যা করে?
ডোন

50

এটি একটি জগাখিচুড়ি. একটি রাজকীয় জগাখিচুড়ি ইতিমধ্যে খুব সম্পূর্ণ উত্তরগুলিতে যুক্ত করতে আমি আমার পারিবারিক অভিজ্ঞতাটি উল্লেখ করতে চাই। আমার মা একজন শিক্ষক ছিলেন এবং প্রক্রিয়াটিতে জড়িত থাকতেন।

দেখা যাচ্ছে যে এটির জন্য কম্পিউটার থাকা কেবল প্রতি-সে কোড কোড করা কঠিন নয়, এটি এমনও কঠিন কারণ এমন একটি শর্ত রয়েছে যা প্রাক-বেকড কম্পিউটার প্রোগ্রামকে নির্দিষ্ট করা কঠিন। উদাহরণ:

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

আপনি দেখতে পাচ্ছেন যে সমস্যাটি এনপি-সম্পূর্ণ নয়, এটি এনপি-পাগল।

সুতরাং তারা যা করে তা হ'ল তাদের কাছে ছোট প্লাস্টিকের পোকামাকড় সহ একটি বড় টেবিল রয়েছে এবং সন্তোষজনক ফলাফল না পাওয়া পর্যন্ত তারা পোকামাকড়কে ঘুরিয়ে নিয়ে যায়। এগুলি কখনই স্ক্র্যাচ থেকে শুরু হয় না: তারা সাধারণত আগের বছরের সময়সূচি থেকে শুরু করে সামঞ্জস্য করে।


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

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

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

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

27

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

চূড়ান্তবিদদের দ্বারা ব্যবহৃত দুটি ওপেন সোর্স ফ্রেমওয়ার্কগুলি একবার দেখুন:

  • JBoss OptaPlanner (জাভা, মুক্ত উত্স)
  • ইউনিটাইম (জাভা, ওপেন সোর্স) - বিশ্ববিদ্যালয়গুলির জন্য আরও

17

আমার অর্ধ-মেয়াদী কার্যভারগুলির মধ্যে একটি জেনেটিক-অ্যালগরিদম স্কুল টেবিল প্রজন্ম ছিল।

পুরো টেবিলটি একটি "জীব"। জেনেরিক জেনেটিক অ্যালগরিদম পদ্ধতির কিছু পরিবর্তন এবং সতর্কতা ছিল:

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

  • "পরিবর্তন" পরিবর্তনের চেয়ে "এক্সচেঞ্জ" রূপান্তরগুলি অনেক বেশি সাধারণ ছিল। পরিবর্তনগুলি কেবল জিনের অংশগুলির মধ্যে ছিল যা বোধগম্য হয়েছিল - কোনও শ্রেণিকক্ষের সাথে কোনও শিক্ষকের বিকল্প নেই no

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

  • শিক্ষকরা "তারপরে কাজ করতে চান", "ঠিক তখন কাজ করতে চান", "তখন কাজ করতে পছন্দ করেন না", "তখন কাজ করতে পারবেন না", সঠিক ওজন নির্ধারিত করে তাদের কাজের চাপের সময়সূচি তৈরি করতে পারে। পুরো 24 ঘন্টা আইনী কাজের সময়গুলি ছিল রাতের সময় ব্যতীত খুব অনাকাঙ্ক্ষিত ছিল।

  • ওজন ফাংশন ... ওহ হ্যাঁ। ওজন ফাংশনটি ছিল নির্বাচিত বৈশিষ্ট্য এবং বৈশিষ্ট্যগুলিতে নির্ধারিত ওজনের বিশাল, রাক্ষসী পণ্য (গুণ হিসাবে) was এটি অত্যন্ত খাড়া ছিল, একটি সম্পত্তি সহজেই উপরে বা নীচের আকারের দ্বারা এটি পরিবর্তন করতে সক্ষম হয়েছিল - এবং একটি প্রাণীর মধ্যে কয়েক হাজার বা হাজারো সম্পত্তি ছিল। এর ফলস্বরূপ ওজন হিসাবে একেবারে বিশাল সংখ্যার ফলস্বরূপ এবং সরাসরি ফলাফল হিসাবে গণনা সম্পাদনের জন্য একটি বিগনাম লাইব্রেরি (জিএমপি) ব্যবহার করা দরকার। কিছু 10 টি গ্রুপ, 10 শিক্ষক এবং 10 শ্রেণিকক্ষের একটি ছোট টেস্টকেসের জন্য, প্রাথমিক সেটটি 10 ​​^ -200 কিছু নোট দিয়ে শুরু হয়েছিল এবং 10 ^ + 300 কিছু দিয়ে শেষ হয়েছে। এটি আরও সমতল যখন এটি সম্পূর্ণ অকার্যকর ছিল। এছাড়াও, বড় বড় "স্কুল" এর সাথে মানগুলি অনেক বিস্তৃত দূরত্ব বাড়িয়েছে।

  • গণনার সময় অনুসারে, দীর্ঘ সময় ধরে একটি ছোট জনসংখ্যার (100) এবং কম প্রজন্মের তুলনায় একটি বড় জনসংখ্যার (10 কে +) মধ্যে সামান্য পার্থক্য ছিল। একই সময়ে গণনা একই মানের সম্পর্কে উত্পাদিত।

  • 10x10x10 পরীক্ষার ক্ষেত্রে বলা হয়েছে যে গণনা (কিছু 1GHz সিপিইউতে) 10 ^ + 300 এর কাছাকাছি স্থিতিশীল করতে কিছু 1 ঘন্টা লাগবে, সময়সূচী যেটি বেশ সুন্দর দেখায় তা উত্সাহিত করবে for

  • নেটওয়ার্কিং সুবিধা প্রদানের মাধ্যমে সমস্যাটি সহজেই প্যারেবলাইজেবল হয় যা গণনা পরিচালিত কম্পিউটারগুলির মধ্যে সেরা নমুনাগুলি বিনিময় করতে পারে।

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


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

4
শুনে ভালো লাগছে! আমি ভাবছি যদি ওজন ফাংশনটি ০.১ এর পরিসরে ভাসমানগুলি দিয়ে করা যায়।
ক্রেগ ম্যাককুইন

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

9

এই সমস্যাটি যতটা মনে হয় তার চেয়ে শক্ত is

অন্যরা যেমন ইঙ্গিত করেছে, এটি এনপি-সম্পূর্ণ সমস্যা, তবে আসুন এর অর্থ কী তা বিশ্লেষণ করা যাক।

মূলত, এর অর্থ হল আপনাকে সমস্ত সম্ভাব্য সংমিশ্রণগুলি দেখতে হবে।

তবে "দেখুন" আপনাকে যা করা দরকার তা আপনাকে খুব বেশি কিছু বলে না।

সমস্ত সম্ভাব্য সংমিশ্রণগুলি তৈরি করা সহজ। এটি প্রচুর পরিমাণে ডেটা তৈরি করতে পারে তবে সমস্যার এই অংশের ধারণাটি বুঝতে আপনার খুব বেশি সমস্যা হওয়া উচিত নয়।

দ্বিতীয় সমস্যাটি হল প্রদত্ত সম্ভাব্য সংমিশ্রণটি ভাল, খারাপ, বা পূর্ববর্তী "ভাল" সমাধানের চেয়ে ভাল কিনা তা বিচার করা।

এর জন্য আপনার কেবল "এটি একটি সম্ভাব্য সমাধান" এর চেয়ে বেশি প্রয়োজন।

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

এমনকি যদি কোনও শিক্ষক পুরোপুরি 16 সপ্তাহ ধরে পুরো সময়ের জন্য কাজ করতে পারেন তবে আপনি যে সমস্যার সমাধানের জন্য শিক্ষকদের মধ্যে বিকল্প চেষ্টা করতে চান তার তুলনায় এটি একটি উপ-অনুকূল সমাধান হতে পারে এবং এই ধরণের ভারসাম্য রেখে সফ্টওয়্যার তৈরি করা খুব কঠিন।

সংক্ষিপ্তসার হিসাবে, এই সমস্যার একটি ভাল সমাধান উত্পাদন করা অনেক লোকের কাছে অনেক মূল্যবান। সুতরাং, এটি ভেঙে ফেলা এবং সমাধান করা খুব সহজ সমস্যা নয়। 100% নয় এমন কিছু লক্ষ্য অর্জনের জন্য প্রস্তুত থাকুন এবং তাদের "যথেষ্ট যথেষ্ট" বলে অভিহিত করুন।


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

8

আমার টাইম টেবিলিং অ্যালগরিদম, এফইটি প্রয়োগ করা হয়েছে (ফ্রি টাইম টেবলিং সফটওয়্যার, http://lalescu.ro/liviu/fet/ , একটি সফল অ্যাপ্লিকেশন):

অ্যালগরিদম হিউরিস্টিক। আমি এর নাম দিয়েছি "রিকার্সি অদলবদল"।

ইনপুট: ক্রিয়াকলাপ A_1 ... A_n এবং সীমাবদ্ধতার একটি সেট।

আউটপুট: বারের একটি সেট টিউপিউ ... টিএ_এন (প্রতিটি ক্রিয়াকলাপের সময় স্লট Ro সরলতার জন্য এখানে রুমগুলি বাদ দেওয়া হয়েছে)। সীমাবদ্ধতার প্রতি শ্রদ্ধা রেখে অ্যালগরিদমকে প্রতিটি ক্রিয়াকলাপকে একটি সময় স্লটে রাখতে হবে। প্রতিটি টিএ_আই 0 (টি_1) এবং সর্বোচ্চ_কাল_স্লট -1 (টি_মিটার) এর মধ্যে থাকে।

বাধা:

সি 1) বেসিক: একযোগে চলতে পারে না এমন ক্রিয়াকলাপগুলির তালিকার তালিকা (উদাহরণস্বরূপ, এআই এবং এ 2, কারণ তাদের একই শিক্ষক বা একই ছাত্র রয়েছে);

সি 2) প্রচুর অন্যান্য প্রতিবন্ধকতা (সরলতার জন্য এখানে বাদ দেওয়া হয়েছে)।

টাইম টেবিলিং অ্যালগরিদম (যা আমি "পুনরাবৃত্ত অদলবদল" নাম দিয়েছি):

  1. ক্রিয়াকলাপগুলি বাছাই করুন, প্রথম সবচেয়ে কঠিন। সমালোচনামূলক পদক্ষেপ নয়, তবে অ্যালগরিদমকে 10 গুণ বা তারও বেশি গতি বাড়িয়ে তুলবে।
  2. প্রতিটি ক্রিয়াকলাপ (এ_আই) একবারে একবারে উপরের ক্রম অনুসরণ করে একটি অনুমোদিত সময় স্লটে রাখার চেষ্টা করুন। এ_আই এর জন্য উপলভ্য স্লট (টি_জে) অনুসন্ধান করুন, যাতে এই ক্রিয়াকলাপটি সীমাবদ্ধতার প্রতি শ্রদ্ধা রেখে সম্মিলিতভাবে স্থাপন করা যায়। যদি আরও স্লট উপলব্ধ থাকে তবে একটি এলোমেলো নির্বাচন করুন। যদি কোনওটি উপলভ্য না থাকে তবে পুনরাবৃত্ত অদলবদল করুন:

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

    । সংক্ষিপ্ততর বিরোধী ক্রিয়াকলাপ সহ একটি স্লট (টি_জে) চয়ন করুন। বলুন এই স্লটে ক্রিয়াকলাপের তালিকায় 3 টি ক্রিয়াকলাপ রয়েছে: A_p, A_q, A_r।

    । T_j এ A_i রাখুন এবং এ_পি, এ_কিউ, এ_আরকে বিনা শিরোনামে করুন।

    d । A_p, A_q, A_r পুনরাবৃত্তভাবে চেষ্টা করার চেষ্টা করুন (যদি পুনরাবৃত্তির মাত্রা খুব বেশি না হয় তবে 14 বলুন, এবং যদি A_i শুরু হয়েছে পদক্ষেপ 2 এর পরে গণনা করা মোট সংখ্যার সংখ্যা খুব বড় না হয়, 2 * n বলুন), পদক্ষেপ 2 হিসাবে)।

    e । যদি সফলভাবে A_p, A_q, A_r স্থাপন করা হয়, সাফল্যের সাথে ফিরে আসুন, অন্যথায় অন্য সময় স্লটগুলি চেষ্টা করুন (2 ধাপে যান) এবং পরবর্তী সেরা সময় স্লটটি চয়ন করুন।

    । সমস্ত (বা যুক্তিসঙ্গত সংখ্যার) সময় স্লট যদি ব্যর্থ চেষ্টা করা হয়, সাফল্য ছাড়াই ফিরে যান।

    । যদি আমরা 0 স্তরে থাকি এবং এ_আই স্থাপনে আমাদের কোনও সাফল্য না থেকে থাকে তবে এটিকে 2 বি) এবং 2 গ ধাপে রাখুন), তবে পুনরাবৃত্তি না করে। আমাদের কাছে এখন 3 - 1 = 2 টি আরও ক্রিয়াকলাপ রয়েছে। পদক্ষেপ 2 এ যান) (সাইকেল চালনা এড়াতে কিছু পদ্ধতি এখানে ব্যবহার করা হয়)।


4
এফইটি আমার পক্ষে খুব উপকারী। ধন্যবাদ @ লিভিউ লালেস্কু!
নোয়েল ল্লেভেরেস

6

আপডেট: মন্তব্যগুলি থেকে ... হিউরিস্টিকসও থাকা উচিত!

আমি প্রোলোগের সাথে যাব ... তারপরে রুবি বা পার্ল বা কোনও কিছু ব্যবহার করে আপনার সমাধানটি একটি সুন্দর আকারে পরিষ্কার করতে পারেন।

teaches(Jill,math).
teaches(Joe,history).

involves(MA101,math).
involves(SS104,history).

myHeuristic(D,A,B) :- [test_case]->D='<';D='>'.
createSchedule :- findall(Class,involves(Class,Subject),Classes),
                  predsort(myHeuristic,Classes,ClassesNew),
                  createSchedule(ClassesNew,[]).
createSchedule(Classes,Scheduled) :- [the actual recursive algorithm].

আমি (এখনও) এই সমস্যার অনুরূপ কিছু করার প্রক্রিয়ায় আছি তবে আমি ঠিক উল্লিখিত মত একই পথটি ব্যবহার করছি। প্রোলোগ (একটি কার্যকরী ভাষা হিসাবে) সত্যই এনপি-হার্ড সমস্যা সমাধান করা সহজ করে তোলে।


4
প্রোলোগ প্রয়োজনীয় সমস্যাগুলি প্রকাশের জন্য অবশ্যই দুর্দান্ত ভাষা, তবে আপনি যেমনটি উল্লেখ করেছেন: সমস্যাটি এনপি-সম্পূর্ণ, এনপি-হার্ড না হলে IS এর অর্থ হ'ল প্রোলোগ কোনও ব্যবহারিক প্রয়োগের জন্য দ্রুত পর্যাপ্ত হতে পারে না।
Poindexter

4
যদি এনপি-র সাথে এর কিছু করার থাকে এবং আমরা আনুমানিকভাবে সন্তুষ্ট হই না, যে কোনও
নির্বিচারক

4
তারপরে লক্ষ্যটি হল কার্যকর হিউরিস্টিক্স বাস্তবায়ন করা ... উদাহরণস্বরূপ একটি সাধারণ 9 টি কার্য শিডিউলিং অ্যালগরিদমটি সম্পন্ন করতে 3.078 গুলি লাগে, তবে একটি ক্ষুদ্রতম উইন্ডো ফার্স্ট হিউরিস্টিক একই সমস্যাটি কেবল গ্রহণ করে: 0.123s
রিড

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

5

জেনেটিক অ্যালগরিদমগুলি প্রায়শই এ জাতীয় সময়সূচির জন্য ব্যবহৃত হয়।

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


5

4
সময়সূচী ইউটিলিটিস এবং সরঞ্জামগুলির লিঙ্কটি মারা গেছে
বারান

@ বারান ওয়েবব্যাক মেশিনটি ব্যবহার করুন এবং আপনি তালিকাটি পাবেন
শ্রিজানশুকলা

3

এই গবেষণাপত্রটি স্কুলের সময়সূচী সমস্যা এবং অ্যালগরিদমের প্রতি তাদের পদ্ধতির বর্ণনা দেয়: " স্ক্ল্যাব্লাসের বিকাশ Schools স্কুল এবং কলেজগুলির জন্য একটি ইন্টারেক্টিভ, সীমাবদ্ধ-ভিত্তিক সময়সূচী। " [পিডিএফ]

লেখক আমাকে অবহিত করেছেন সিল্লাবাস সফ্টওয়্যারটি এখনও এখানে ব্যবহার / বিকশিত হচ্ছে: http://www.scientia.com/uk/


3

আমি একটি বিস্তৃত ব্যবহৃত সময়সূচী ইঞ্জিনে কাজ করি যা ঠিক এটি করে। হ্যাঁ, এটি এনপি-সম্পূর্ণ; সেরা পন্থাগুলি একটি অনুকূল সমাধান আনুমানিক জন্য সন্ধান করে। এবং, অবশ্যই বলার অনেকগুলি বিভিন্ন উপায় রয়েছে যেটি একটি "সেরা" সমাধান - এটি কি আরও গুরুত্বপূর্ণ যে আপনার শিক্ষকরা তাদের সময়সূচিতে খুশি হন বা শিক্ষার্থীরা তাদের সমস্ত ক্লাসে প্রবেশ করে, উদাহরণস্বরূপ?

আপনার প্রথমে সবচেয়ে গুরুত্বপূর্ণ প্রশ্নটি সমাধান করা উচিত যা এই সিস্টেমের সময়সূচী করার একটি উপায়কে অন্যের চেয়ে ভাল করে তোলে ? এটি হ'ল, যদি আমি মিসেস জোনসকে 8 এ ম্যাথ এবং 9 এ মিঃ স্মিথকে পাঠদানের সাথে শিডিয়ুল করি, তবে উভয়ই 10 টিতে ম্যাথ পড়ানোর সাথে এটির চেয়ে ভাল বা খারাপ? মিসেস জোন্স 8-তে এবং মিঃ জোন্স 2 তে শিক্ষকতা করায় এটি কি আরও ভাল বা খারাপ? কেন?

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

একটি স্থানীয় অনুসন্ধান অপ্টিমাইজেশন পাস প্রায়শই ভাল ফলাফলের জন্য শেষের উত্তরটি "পোলিশ" করতে ব্যবহৃত হয়।

নোট করুন যে সাধারণত আমরা স্কুল শিডিয়ুলিংয়ে অত্যন্ত সংস্থান-সংক্রান্ত সিস্টেমগুলি নিয়ে কাজ করছি। দিনের 75% অংশ লাউঞ্জটিতে বসে অনেকগুলি খালি ঘর বা শিক্ষকদের নিয়ে স্কুলগুলি সারা বছর জুড়ে যায় না। সমাধান সমৃদ্ধ পরিবেশে সর্বোত্তম কাজ করে এমন পদ্ধতিগুলি স্কুল নির্ধারণে অগত্যা প্রযোজ্য নয়।


2

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

শুভকামনা!


2

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


2

জেনেটিক অ্যালগরিদম দিয়ে আপনি এটি টেক করতে পারেন, হ্যাঁ। তবে তোমার উচিত নয় :)। এটি খুব ধীর হতে পারে এবং প্যারামিটারের টিউনিং খুব বেশি সময় নির্ধারণ ইত্যাদি হতে পারে etc.

সফল অন্যান্য পন্থা আছে। সমস্ত ওপেন সোর্স প্রকল্পগুলিতে প্রয়োগ করা হয়েছে:

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

একটি সময় নির্ধারণকারী সফ্টওয়্যার তালিকার জন্য এখানে দেখুন


0

আমি মনে করি আপনার জেনেটিক অ্যালগরিদম ব্যবহার করা উচিত কারণ:

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

    জেনেটিক অ্যালগরিদম সংজ্ঞা

    জেনেটিক অ্যালগরিদম টিউটোরিয়াল

    জিএ সহ ক্লাস শিডিউলিং প্রকল্প

এছাড়াও একবার দেখুন: অনুরূপ প্রশ্ন এবং অন্য একটি


0

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

পিরিয়ডফ্ল্যাগ.ইচ ডু | কে 2, ভি 2 |

            if(TimetableDefinition.find(k2).period.to_i != 0)
                subjectflag.each do |k3,v3|
                    if (v3 == 0)
                        if(getflag_period(periodflag,k2))
                            @teachers=EmployeesSubject.where(subject_name: @subjects.find(k3).name, division_id: division.id).pluck(:employee_id)
                            @teacherlists=Employee.find(@teachers)
                            teacherflag=Hash[teacher_flag(@teacherlists,teacherflag,flag).to_a.shuffle] 
                            teacherflag.each do |k4,v4|
                                if(v4 == 0)
                                    if(getflag_subject(subjectflag,k3))
                                        subjectperiod=TimetableAssign.where("timetable_definition_id = ? AND subject_id = ?",k2,k3)
                                        if subjectperiod.blank?
                                            issubjectpresent=TimetableAssign.where("section_id = ? AND subject_id = ?",section.id,k3)
                                            if issubjectpresent.blank?
                                                isteacherpresent=TimetableAssign.where("section_id = ? AND employee_id = ?",section.id,k4)
                                                if isteacherpresent.blank?
                                                    @finaltt=TimetableAssign.new
                                                    @finaltt.timetable_struct_id=@timetable_struct.id
                                                    @finaltt.employee_id=k4
                                                    @finaltt.section_id=section.id
                                                    @finaltt.standard_id=standard.id
                                                    @finaltt.division_id=division.id
                                                    @finaltt.subject_id=k3
                                                    @finaltt.timetable_definition_id=k2
                                                    @finaltt.timetable_day_id=k1
                                                    set_school_id(@finaltt,current_user)
                                                    if(@finaltt.save)

                                                        setflag_sub(subjectflag,k3,1)
                                                        setflag_period(periodflag,k2,1)
                                                        setflag_teacher(teacherflag,k4,1)
                                                    end
                                                end
                                            else
                                                @subjectdetail=TimetableAssign.find_by_section_id_and_subject_id(@section.id,k3)
                                                @finaltt=TimetableAssign.new
                                                @finaltt.timetable_struct_id=@subjectdetail.timetable_struct_id
                                                @finaltt.employee_id=@subjectdetail.employee_id
                                                @finaltt.section_id=section.id
                                                @finaltt.standard_id=standard.id
                                                @finaltt.division_id=division.id
                                                @finaltt.subject_id=@subjectdetail.subject_id
                                                @finaltt.timetable_definition_id=k2
                                                @finaltt.timetable_day_id=k1
                                                set_school_id(@finaltt,current_user)
                                                if(@finaltt.save)

                                                    setflag_sub(subjectflag,k3,1)
                                                    setflag_period(periodflag,k2,1)
                                                    setflag_teacher(teacherflag,k4,1)
                                                end
                                            end
                                        end
                                    end
                                end
                            end
                        end
                    end
                end
            end
        end
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.