1+ {
2+ "cells" : [
3+ {
4+ "cell_type" : " markdown" ,
5+ "metadata" : {
6+ "id" : " view-in-github" ,
7+ "colab_type" : " text"
8+ },
9+ "source" : [
10+ " <a href=\" https://colab.research.google.com/github/NikolaiZolotykh/ScientificPython/blob/master/16.02.%20%D0%A6%D0%9B%D0%9F.%20%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0%20%D1%81%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%20%D1%80%D0%B0%D1%81%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F.ipynb\" target=\" _parent\" ><img src=\" https://colab.research.google.com/assets/colab-badge.svg\" alt=\" Open In Colab\" /></a>"
11+ ]
12+ },
13+ {
14+ "cell_type" : " code" ,
15+ "execution_count" : null ,
16+ "metadata" : {
17+ "colab" : {
18+ "base_uri" : " https://localhost:8080/"
19+ },
20+ "id" : " Gc00N6R5gSE2" ,
21+ "outputId" : " 1eeccf29-163d-4828-c904-ccf369dc7519"
22+ },
23+ "outputs" : [
24+ {
25+ "output_type" : " stream" ,
26+ "name" : " stdout" ,
27+ "text" : [
28+ " Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n " ,
29+ " Collecting pulp\n " ,
30+ " Downloading PuLP-2.7.0-py3-none-any.whl (14.3 MB)\n " ,
31+ " \u001b [2K \u001b [90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b [0m \u001b [32m14.3/14.3 MB\u001b [0m \u001b [31m71.9 MB/s\u001b [0m eta \u001b [36m0:00:00\u001b [0m\n " ,
32+ " \u001b [?25hInstalling collected packages: pulp\n " ,
33+ " Successfully installed pulp-2.7.0\n "
34+ ]
35+ }
36+ ],
37+ "source" : [
38+ " !pip install pulp\n " ,
39+ " import pulp"
40+ ]
41+ },
42+ {
43+ "cell_type" : " code" ,
44+ "execution_count" : null ,
45+ "metadata" : {
46+ "id" : " Mk4ulvLhgSE4"
47+ },
48+ "outputs" : [],
49+ "source" : [
50+ " m = 3 # количество учебных дисциплин (преподавателей)\n " ,
51+ " n = 3 # количество академических групп\n " ,
52+ " p = 4 # количество тактов времени"
53+ ]
54+ },
55+ {
56+ "cell_type" : " code" ,
57+ "source" : [
58+ " #m = 10 # количество учебных дисциплин (преподавателей)\n " ,
59+ " #n = 10 # количество академических групп\n " ,
60+ " #p = 12 # количество тактов времени"
61+ ],
62+ "metadata" : {
63+ "id" : " 6I0a9VO6jG7F"
64+ },
65+ "execution_count" : null ,
66+ "outputs" : []
67+ },
68+ {
69+ "cell_type" : " code" ,
70+ "execution_count" : null ,
71+ "metadata" : {
72+ "id" : " sRYl8NAigSE5"
73+ },
74+ "outputs" : [],
75+ "source" : [
76+ " I = range(m) # множество учебных дисциплин\n " ,
77+ " J = range(n) # множество академических групп\n " ,
78+ " T = range(p) # множество тактов\n "
79+ ]
80+ },
81+ {
82+ "cell_type" : " code" ,
83+ "execution_count" : null ,
84+ "metadata" : {
85+ "id" : " hh55eWddgSE5"
86+ },
87+ "outputs" : [],
88+ "source" : [
89+ " # x[i][j][k] = 1 означает, что в k-й такт у j-й группы проходит занятие по i-й дисциплине */\n " ,
90+ " x = pulp.LpVariable.dicts(\" x\" , (I, J, T), 0, 1, pulp.LpInteger)"
91+ ]
92+ },
93+ {
94+ "cell_type" : " code" ,
95+ "execution_count" : null ,
96+ "metadata" : {
97+ "colab" : {
98+ "base_uri" : " https://localhost:8080/"
99+ },
100+ "id" : " QOhqX9t4gSE6" ,
101+ "outputId" : " b0159373-b512-4dc3-d286-1daac23902dc"
102+ },
103+ "outputs" : [
104+ {
105+ "output_type" : " execute_result" ,
106+ "data" : {
107+ "text/plain" : [
108+ " x_0_2_2"
109+ ]
110+ },
111+ "metadata" : {},
112+ "execution_count" : 5
113+ }
114+ ],
115+ "source" : [
116+ " x[0][2][2]"
117+ ]
118+ },
119+ {
120+ "cell_type" : " code" ,
121+ "execution_count" : null ,
122+ "metadata" : {
123+ "colab" : {
124+ "base_uri" : " https://localhost:8080/"
125+ },
126+ "id" : " ll8i2ENPgSE7" ,
127+ "outputId" : " 643ddd4c-ec3f-4a82-ff5d-8efad5a19076"
128+ },
129+ "outputs" : [
130+ {
131+ "output_type" : " stream" ,
132+ "name" : " stderr" ,
133+ "text" : [
134+ " /usr/local/lib/python3.8/dist-packages/pulp/pulp.py:1352: UserWarning: Spaces are not permitted in the name. Converted to '_'\n " ,
135+ " warnings.warn(\" Spaces are not permitted in the name. Converted to '_'\" )\n "
136+ ]
137+ }
138+ ],
139+ "source" : [
140+ " prob = pulp.LpProblem(\" School Scheduling Problem\" , pulp.LpMinimize)\n " ,
141+ " #prob += 0, \" Arbitrary Objective Function\" "
142+ ]
143+ },
144+ {
145+ "cell_type" : " code" ,
146+ "execution_count" : null ,
147+ "metadata" : {
148+ "id" : " jIVKJPmvgSE8"
149+ },
150+ "outputs" : [],
151+ "source" : [
152+ " # У каждой группы по каждой дисциплине должно пройти ровно одно занятие:\n " ,
153+ " for i in I:\n " ,
154+ " for j in J:\n " ,
155+ " prob += pulp.lpSum([x[i][j][t] for t in T]) == 1"
156+ ]
157+ },
158+ {
159+ "cell_type" : " code" ,
160+ "execution_count" : null ,
161+ "metadata" : {
162+ "id" : " X8jQ5WKbgSE8"
163+ },
164+ "outputs" : [],
165+ "source" : [
166+ " # в любой такт по каждой дисциплине проходит не более одного занятия во всех группах:\n " ,
167+ " for i in I:\n " ,
168+ " for t in T:\n " ,
169+ " prob += pulp.lpSum([x[i][j][t] for j in J]) <= 1"
170+ ]
171+ },
172+ {
173+ "cell_type" : " code" ,
174+ "execution_count" : null ,
175+ "metadata" : {
176+ "id" : " vs4J2k1VgSE8"
177+ },
178+ "outputs" : [],
179+ "source" : [
180+ " # в любой такт у любой группы проходит не более одного занятия:\n " ,
181+ " for j in J:\n " ,
182+ " for t in T:\n " ,
183+ " prob += pulp.lpSum([x[i][j][t] for i in I]) <= 1"
184+ ]
185+ },
186+ {
187+ "cell_type" : " code" ,
188+ "execution_count" : null ,
189+ "metadata" : {
190+ "id" : " K5F2WbMcgSE9"
191+ },
192+ "outputs" : [],
193+ "source" : [
194+ " # 1-й преподаватель не может проводить занятия 4-й парой:\n " ,
195+ " for j in J:\n " ,
196+ " prob += x[0][j][3] == 0\n " ,
197+ " \n " ,
198+ " # 2-й преподаватель не может проводить занятия 3-й парой:\n " ,
199+ " for j in J:\n " ,
200+ " prob += x[1][j][2] == 0\n " ,
201+ " \n " ,
202+ " # 2-я группа не может учиться 1-й парой:\n " ,
203+ " for i in I:\n " ,
204+ " prob += x[i][1][0] == 0 \n " ,
205+ " \n " ,
206+ " # 3-я группа не может учиться 4-й парой \n " ,
207+ " for i in I:\n " ,
208+ " prob += x[i][2][3] == 0"
209+ ]
210+ },
211+ {
212+ "cell_type" : " code" ,
213+ "execution_count" : null ,
214+ "metadata" : {
215+ "colab" : {
216+ "base_uri" : " https://localhost:8080/"
217+ },
218+ "id" : " ULj4NxC6gSE9" ,
219+ "outputId" : " 810ac2e0-08ed-4e5d-ecbe-7fbe85090160"
220+ },
221+ "outputs" : [
222+ {
223+ "output_type" : " stream" ,
224+ "name" : " stdout" ,
225+ "text" : [
226+ " Status: Optimal\n "
227+ ]
228+ }
229+ ],
230+ "source" : [
231+ " prob.solve()\n " ,
232+ " print(\" Status:\" , pulp.LpStatus[prob.status])\n "
233+ ]
234+ },
235+ {
236+ "cell_type" : " code" ,
237+ "execution_count" : null ,
238+ "metadata" : {
239+ "colab" : {
240+ "base_uri" : " https://localhost:8080/"
241+ },
242+ "id" : " jve6S5sagSE9" ,
243+ "outputId" : " 307deb26-e340-441d-e842-c6320716c824"
244+ },
245+ "outputs" : [
246+ {
247+ "output_type" : " stream" ,
248+ "name" : " stdout" ,
249+ "text" : [
250+ " \n " ,
251+ " Solution:\n " ,
252+ " \n " ,
253+ " \\\n " ,
254+ " \\ Groups\n " ,
255+ " t \\\n " ,
256+ " \\\n " ,
257+ " 0 1 2 3 4 5 6 7 8 9\n " ,
258+ " 0 2 . 7 5 1 0 4 6 8 9\n " ,
259+ " 1 7 6 8 9 3 . 0 1 4 5\n " ,
260+ " 2 3 2 9 8 6 4 7 . 5 0\n " ,
261+ " 3 . 5 . 4 2 8 3 7 6 .\n " ,
262+ " 4 . 7 4 . 9 5 2 3 1 6\n " ,
263+ " 5 0 9 5 6 . 2 1 8 3 7\n " ,
264+ " 6 4 8 6 1 0 7 5 9 . 3\n " ,
265+ " 7 6 1 2 0 8 . 9 5 7 4\n " ,
266+ " 8 9 . . 3 . 1 . 2 0 8\n " ,
267+ " 9 8 3 0 . 4 9 6 . 2 1\n " ,
268+ " 10 1 0 3 7 5 6 8 4 . 2\n " ,
269+ " 11 5 4 1 2 7 3 . 0 9 .\n " ,
270+ " \n "
271+ ]
272+ }
273+ ],
274+ "source" : [
275+ " print(\"\\ n Solution:\\ n\\ n \\\\\\ n \\\\ Groups\\ n t \\\\\\ n \\\\\" )\n " ,
276+ " print(\" \" , end=\"\" )\n " ,
277+ " for j in J:\n " ,
278+ " print(\" {:2d}\" .format(j), end=\"\" )\n " ,
279+ " print()\n " ,
280+ " \n " ,
281+ " for t in T:\n " ,
282+ " print(\" {:2d} \" .format(t), end=\"\" )\n " ,
283+ " for j in J:\n " ,
284+ " lesson = False\n " ,
285+ " for i in I:\n " ,
286+ " if pulp.value(x[i][j][t]) == 1:\n " ,
287+ " print(\" {:2d}\" .format(i), end=\"\" )\n " ,
288+ " lesson = True\n " ,
289+ " break\n " ,
290+ " if not lesson:\n " ,
291+ " print(\" .\" , end=\"\" ) \n " ,
292+ " print()\n " ,
293+ " print()\n "
294+ ]
295+ }
296+ ],
297+ "metadata" : {
298+ "kernelspec" : {
299+ "display_name" : " Python 3" ,
300+ "language" : " python" ,
301+ "name" : " python3"
302+ },
303+ "language_info" : {
304+ "codemirror_mode" : {
305+ "name" : " ipython" ,
306+ "version" : 3
307+ },
308+ "file_extension" : " .py" ,
309+ "mimetype" : " text/x-python" ,
310+ "name" : " python" ,
311+ "nbconvert_exporter" : " python" ,
312+ "pygments_lexer" : " ipython3" ,
313+ "version" : " 3.8.3"
314+ },
315+ "colab" : {
316+ "provenance" : [],
317+ "include_colab_link" : true
318+ }
319+ },
320+ "nbformat" : 4 ,
321+ "nbformat_minor" : 0
322+ }
0 commit comments