Skip to content

Commit 8c355bd

Browse files
Создано с помощью Colaboratory
1 parent 61f3f83 commit 8c355bd

File tree

1 file changed

+322
-0
lines changed

1 file changed

+322
-0
lines changed
Lines changed: 322 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,322 @@
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

Comments
 (0)