আমি বিশ্ববিদ্যালয়ের একটি ল্যাব অনুশীলন শিক্ষক, গত বছরের ছাত্রদের মন্তব্যের ভিত্তিতে, আমরা চেয়েছিলাম, আমার বস এবং আমি তাদের সম্বোধন করব, আমার বস একটি সি স্ক্রিপ্ট লেখার সাথে যেতে বেছে নিয়েছিলেন এবং আমি আমাদের সমস্যা সমাধানের চেষ্টা করার জন্য পাইথন (পাইথন-সীমাবদ্ধতা) বাছাই করি।
informations
- এখানে 6 টি সেশন রয়েছে
- এখানে 4 টি ভূমিকা রয়েছে
- এখানে 6 টি অনুশীলন রয়েছে
- সেখানে 32 জন শিক্ষার্থী রয়েছেন
- দলে প্রতি শিক্ষার্থী আছে 4 জন
সমস্যা:
4 টি পৃথক সেশনে 4 অনুশীলনে প্রতিটি শিক্ষার্থীকে 4 টি ভূমিকার জন্য বরাদ্দ করুন।
বাধা:
- শিক্ষার্থীদের একবার ভূমিকা পালন করা উচিত
- শিক্ষার্থীদের 6 টির মধ্যে 4 টি আলাদা অনুশীলন করা উচিত
- শিক্ষার্থীদের প্রতি সেশনে একটি করে অনুশীলন করা উচিত
- শিক্ষার্থীদের একই সাথীর সাথে একবার দেখা করা উচিত
টেমপ্লেট:
এখানে আমি শিক্ষার্থীদের সাথে টেম্পলেটটি অনুভব করছি, যেখানে প্রতিটি দল 4 জন শিক্ষার্থী নিয়ে গঠিত, অবস্থানগুলি [0, 1, 2 বা 3] তাদের অর্পিত ভূমিকা। প্রতিটি উপলব্ধ অবস্থানের সংখ্যা 1 থেকে 128 পর্যন্ত
[# Semester
[ # Session
[ # Practice/Team
1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16],
[17, 18, 19, 20],
[21, 22, 23, 24]],
[[25, 26, 27, 28],
[29, 30, 31, 32],
[33, 34, 35, 36],
[37, 38, 39, 40],
[41, 42, 43, 44],
[45, 46, 47, 48]],
[[49, 50, 51, 52],
[53, 54, 55, 56],
[57, 58, 59, 60],
[61, 62, 63, 64],
[65, 66, 67, 68],
[69, 70, 71, 72]],
[[73, 74, 75, 76],
[77, 78, 79, 80],
[81, 82, 83, 84],
[85, 86, 87, 88],
[89, 90, 91, 92],
[93, 94, 95, 96]],
[[97, 98, 99, 100],
[101, 102, 103, 104],
[105, 106, 107, 108],
[109, 110, 111, 112]],
[[113, 114, 115, 116],
[117, 118, 119, 120],
[121, 122, 123, 124],
[125, 126, 127, 128]]]
অন্য কথায়:
এটি একটি অধিবেশন:
[[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16],
[17, 18, 19, 20],
[21, 22, 23, 24]],
সেই দলগুলি একই অনুশীলন করে:
[
[1, 2, 3, 4],
[25, 26, 27, 28],
[49, 50, 51, 52],
[73, 74, 75, 76],
[97, 98, 99, 100],
[113, 114, 115, 116]
]
এই অবস্থানগুলি একই ভূমিকা পালন করে:
[
1,
5,
9,
13,
17,
21,
25,
...
]
আমার এখন পর্যন্ত যা আছে:
পাইথন-সীমাবদ্ধতা ব্যবহার করে আমি প্রথম তিনটি প্রতিবন্ধকে বৈধতা দিতে সক্ষম হয়েছি:
Valid solution : False
- sessions : [True, True, True, True, True, True]
- practices : [True, True, True, True, True, True]
- roles : [True, True, True, True]
- teams : [False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False]
আকর্ষণীয় হতে পারে তাদের জন্য আমি সহজভাবে এটি করতে পারি:
প্রতিটি শর্তের জন্য আমি AllDifferencesConstraint ব্যবহার করি । উদাহরণস্বরূপ, একটি সেশনের জন্য আমি এটি করি:
problem.addConstraint(AllDifferentConstraint(), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24])
আমি দলকে বাধা দেওয়ার কোনও উপায় খুঁজে পাচ্ছি না, পুরোপুরি আমার শেষ চেষ্টাটি semester
ছিল:
def team_constraint(self, *semester):
students = defaultdict(list)
# get back each teams based on the format [# Semester [ #Session [# Practice/Team ...
teams = [list(semester[i:i+4]) for i in range(0, len(semester), 4)]
# Update Students dict with all mate they work with
for team in teams:
for student in team:
students[student] += [s for s in team if s != student]
# Compute for each student if they meet someone more than once
dupli = []
for student, mate in students.items():
dupli.append(len(mate) - len(set(mate)))
# Loosly constraint, if a student meet somone 0 or one time it's find
if max(dupli) >= 2:
print("Mate encounter more than one time", dupli, min(dupli) ,max(dupli))
return False
pprint(students)
return True
প্রশ্নসমূহ:
- দলের কন্ডিশনের জন্য আমি যা চাই তা করা কি সম্ভব? আমার অর্থ হ'ল প্রতিটি ছাত্রকে 12 জন সঙ্গীকে নিয়োগ করা সম্ভব হয়েছে এবং তাদের প্রত্যেকে কেবল একবারই একই সঙ্গীর সাথে দেখা করতে পারলে আমার কোনও ধারণা নেই।
- দলের প্রতিবন্ধকতার জন্য, আমি কি আরও পারফরম্যান্ট অ্যালগরিদম মিস করেছি?
- আমি অনুসরণ করতে পারি যে কোন পিস্তক?
(4, 4)
পরিবর্তিত আকারের(4, 6)
?