मैं विश्वविद्यालय में एक लैब प्रैक्टिस ट्यूटर हूं, जो पिछले साल के छात्र टिप्पणियों पर आधारित था, हम उन्हें संबोधित करने के लिए मेरे बॉस और मैं चाहते थे। मेरे बॉस ने एक सी स्क्रिप्ट लिखने के साथ जाने का फैसला किया और मैं आपकी समस्या को हल करने की कोशिश करने के लिए अजगर (अजगर-बाधा) उठाता हूं।
जानकारी
- 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]
उन लोगों के लिए जो दिलचस्प हो सकते हैं मैं बस इस तरह से करता हूं:
प्रत्येक शर्त के लिए मैं AllDifferentConstraint का उपयोग करता हूं । उदाहरण के लिए, एक सत्र के लिए:
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)
तरह आकार के क्यों हैं ?