\n",
147 | " برنامهای بنویسید که مجموع اعضای یک لیست را محاسبه کند.\n",
148 | "
"
149 | ]
150 | },
151 | {
152 | "cell_type": "code",
153 | "execution_count": 4,
154 | "metadata": {},
155 | "outputs": [
156 | {
157 | "name": "stdout",
158 | "output_type": "stream",
159 | "text": [
160 | "40\n"
161 | ]
162 | }
163 | ],
164 | "source": [
165 | "list_sum = 0\n",
166 | "for num in num_list:\n",
167 | " list_sum += num\n",
168 | "print(list_sum)"
169 | ]
170 | },
171 | {
172 | "cell_type": "markdown",
173 | "metadata": {},
174 | "source": [
175 | "
\n",
176 | "در پایتون ما به صورت بالا عمل نمیکنیم. بلکه از دستور\n",
177 | "sum\n",
178 | "استفاده میکنیم.\n",
179 | "
"
180 | ]
181 | },
182 | {
183 | "cell_type": "code",
184 | "execution_count": 5,
185 | "metadata": {},
186 | "outputs": [
187 | {
188 | "data": {
189 | "text/plain": [
190 | "40"
191 | ]
192 | },
193 | "execution_count": 5,
194 | "metadata": {},
195 | "output_type": "execute_result"
196 | }
197 | ],
198 | "source": [
199 | "sum(num_list)"
200 | ]
201 | },
202 | {
203 | "cell_type": "markdown",
204 | "metadata": {},
205 | "source": [
206 | "
\n",
207 | "سوال:\n",
208 | " کوچکترین عدد را در بین لیستی از اعداد صحیح پیدا کنید.\n",
209 | "
"
210 | ]
211 | },
212 | {
213 | "cell_type": "code",
214 | "execution_count": 6,
215 | "metadata": {},
216 | "outputs": [
217 | {
218 | "name": "stdout",
219 | "output_type": "stream",
220 | "text": [
221 | "2\n"
222 | ]
223 | }
224 | ],
225 | "source": [
226 | "num_list = [12, 23, 2, 7, 4, 8, 81]\n",
227 | "minimum = num_list[0]\n",
228 | "for num in num_list:\n",
229 | " if minimum > num:\n",
230 | " minimum = num\n",
231 | "print(minimum)"
232 | ]
233 | },
234 | {
235 | "cell_type": "markdown",
236 | "metadata": {},
237 | "source": [
238 | "
\n",
239 | "در پایتون ما به صورت بالا عمل نمیکنیم. بلکه از دستور \n",
240 | "min\n",
241 | "استفاده میکنیم.\n",
242 | "
"
243 | ]
244 | },
245 | {
246 | "cell_type": "code",
247 | "execution_count": 7,
248 | "metadata": {},
249 | "outputs": [
250 | {
251 | "data": {
252 | "text/plain": [
253 | "2"
254 | ]
255 | },
256 | "execution_count": 7,
257 | "metadata": {},
258 | "output_type": "execute_result"
259 | }
260 | ],
261 | "source": [
262 | "min(num_list)"
263 | ]
264 | },
265 | {
266 | "cell_type": "code",
267 | "execution_count": 8,
268 | "metadata": {},
269 | "outputs": [
270 | {
271 | "data": {
272 | "text/plain": [
273 | "81"
274 | ]
275 | },
276 | "execution_count": 8,
277 | "metadata": {},
278 | "output_type": "execute_result"
279 | }
280 | ],
281 | "source": [
282 | "max(num_list)"
283 | ]
284 | },
285 | {
286 | "cell_type": "markdown",
287 | "metadata": {},
288 | "source": [
289 | "
\n",
290 | "تمرین:\n",
291 | " بیشینه یک لیست از اعداد صحیح را با استفاده از حلقه\n",
292 | " for\n",
293 | " پیدا کنید.\n",
294 | "
"
295 | ]
296 | },
297 | {
298 | "cell_type": "code",
299 | "execution_count": 9,
300 | "metadata": {},
301 | "outputs": [
302 | {
303 | "data": {
304 | "text/plain": [
305 | "range(0, 10)"
306 | ]
307 | },
308 | "execution_count": 9,
309 | "metadata": {},
310 | "output_type": "execute_result"
311 | }
312 | ],
313 | "source": [
314 | "range(0, 10)"
315 | ]
316 | },
317 | {
318 | "cell_type": "code",
319 | "execution_count": 11,
320 | "metadata": {},
321 | "outputs": [
322 | {
323 | "data": {
324 | "text/plain": [
325 | "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]"
326 | ]
327 | },
328 | "execution_count": 11,
329 | "metadata": {},
330 | "output_type": "execute_result"
331 | }
332 | ],
333 | "source": [
334 | "list(range(10))"
335 | ]
336 | },
337 | {
338 | "cell_type": "code",
339 | "execution_count": 12,
340 | "metadata": {},
341 | "outputs": [
342 | {
343 | "data": {
344 | "text/plain": [
345 | "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]"
346 | ]
347 | },
348 | "execution_count": 12,
349 | "metadata": {},
350 | "output_type": "execute_result"
351 | }
352 | ],
353 | "source": [
354 | "list(range(0, 10))"
355 | ]
356 | },
357 | {
358 | "cell_type": "code",
359 | "execution_count": 13,
360 | "metadata": {},
361 | "outputs": [
362 | {
363 | "data": {
364 | "text/plain": [
365 | "[0, 2, 4, 6, 8]"
366 | ]
367 | },
368 | "execution_count": 13,
369 | "metadata": {},
370 | "output_type": "execute_result"
371 | }
372 | ],
373 | "source": [
374 | "list(range(0, 10, 2))"
375 | ]
376 | },
377 | {
378 | "cell_type": "code",
379 | "execution_count": 14,
380 | "metadata": {},
381 | "outputs": [
382 | {
383 | "name": "stdout",
384 | "output_type": "stream",
385 | "text": [
386 | "72\n"
387 | ]
388 | }
389 | ],
390 | "source": [
391 | "sum_ = 0\n",
392 | "n = 30\n",
393 | "for i in range(1, 31):\n",
394 | " if n % i == 0:\n",
395 | " sum_ += i\n",
396 | "print(sum_)"
397 | ]
398 | },
399 | {
400 | "cell_type": "markdown",
401 | "metadata": {},
402 | "source": [
403 | "
\n",
404 | "حال با دستور \n",
405 | "zip\n",
406 | "آشنا میشویم. این دستور برای ترکیب عضو به عضو لیستها استفاده میشود.\n",
407 | "
"
408 | ]
409 | },
410 | {
411 | "cell_type": "code",
412 | "execution_count": 17,
413 | "metadata": {},
414 | "outputs": [
415 | {
416 | "name": "stdout",
417 | "output_type": "stream",
418 | "text": [
419 | "[12, 23, 2, 7, 4, 8, 81]\n"
420 | ]
421 | }
422 | ],
423 | "source": [
424 | "print(num_list)"
425 | ]
426 | },
427 | {
428 | "cell_type": "code",
429 | "execution_count": 3,
430 | "metadata": {},
431 | "outputs": [],
432 | "source": [
433 | "indecis = [0, 1, 2, 3, 4, 5, 6]"
434 | ]
435 | },
436 | {
437 | "cell_type": "code",
438 | "execution_count": 4,
439 | "metadata": {},
440 | "outputs": [
441 | {
442 | "data": {
443 | "text/plain": [
444 | "
"
445 | ]
446 | },
447 | "execution_count": 4,
448 | "metadata": {},
449 | "output_type": "execute_result"
450 | }
451 | ],
452 | "source": [
453 | "zip(indecis, num_list)"
454 | ]
455 | },
456 | {
457 | "cell_type": "code",
458 | "execution_count": 20,
459 | "metadata": {},
460 | "outputs": [
461 | {
462 | "data": {
463 | "text/plain": [
464 | "[(0, 12), (1, 23), (2, 2), (3, 7), (4, 4), (5, 8), (6, 81)]"
465 | ]
466 | },
467 | "execution_count": 20,
468 | "metadata": {},
469 | "output_type": "execute_result"
470 | }
471 | ],
472 | "source": [
473 | "list(zip(indecis, num_list))"
474 | ]
475 | },
476 | {
477 | "cell_type": "code",
478 | "execution_count": 5,
479 | "metadata": {},
480 | "outputs": [
481 | {
482 | "name": "stdout",
483 | "output_type": "stream",
484 | "text": [
485 | "pencil 200\n",
486 | "pen 300\n",
487 | "paper 400\n"
488 | ]
489 | }
490 | ],
491 | "source": [
492 | "products =['pencil', 'pen', 'paper']\n",
493 | "demands = [200, 300, 400]\n",
494 | "for p , d in zip(products,demands):\n",
495 | " print(p ,d) "
496 | ]
497 | },
498 | {
499 | "cell_type": "code",
500 | "execution_count": 21,
501 | "metadata": {},
502 | "outputs": [
503 | {
504 | "name": "stdout",
505 | "output_type": "stream",
506 | "text": [
507 | "Index 0: 12\n",
508 | "Index 1: 23\n",
509 | "Index 2: 02\n",
510 | "Index 3: 07\n",
511 | "Index 4: 04\n",
512 | "Index 5: 08\n",
513 | "Index 6: 81\n"
514 | ]
515 | }
516 | ],
517 | "source": [
518 | "for index, element in zip(indecis, num_list):\n",
519 | " print(f\"Index {index}: {element:02d}\")"
520 | ]
521 | },
522 | {
523 | "cell_type": "markdown",
524 | "metadata": {},
525 | "source": [
526 | "\n",
527 | "حلقه\n",
528 | "while\n",
529 | "تا زمانی که یک شرط خاص برقرار باشد، مجموعه دستورهای مورد انتظار را اجرا میکند.\n",
530 | "
"
531 | ]
532 | },
533 | {
534 | "cell_type": "markdown",
535 | "metadata": {},
536 | "source": [
537 | "\n",
538 | "ساختار کلی حلقه\n",
539 | "while\n",
540 | "به صورت زیر است:\n",
541 | "
"
542 | ]
543 | },
544 | {
545 | "cell_type": "markdown",
546 | "metadata": {},
547 | "source": [
548 | "```python\n",
549 | "while condition:\n",
550 | " statements\n",
551 | "```"
552 | ]
553 | },
554 | {
555 | "cell_type": "code",
556 | "execution_count": 6,
557 | "metadata": {},
558 | "outputs": [
559 | {
560 | "name": "stdout",
561 | "output_type": "stream",
562 | "text": [
563 | "0\n",
564 | "1\n",
565 | "2\n",
566 | "3\n",
567 | "4\n",
568 | "5\n",
569 | "6\n",
570 | "7\n",
571 | "8\n",
572 | "9\n"
573 | ]
574 | }
575 | ],
576 | "source": [
577 | "i = 0\n",
578 | "while i < 10:\n",
579 | " print(i)\n",
580 | " i += 1"
581 | ]
582 | }
583 | ],
584 | "metadata": {
585 | "kernelspec": {
586 | "display_name": "Python 3",
587 | "language": "python",
588 | "name": "python3"
589 | },
590 | "language_info": {
591 | "codemirror_mode": {
592 | "name": "ipython",
593 | "version": 3
594 | },
595 | "file_extension": ".py",
596 | "mimetype": "text/x-python",
597 | "name": "python",
598 | "nbconvert_exporter": "python",
599 | "pygments_lexer": "ipython3",
600 | "version": "3.12.5"
601 | }
602 | },
603 | "nbformat": 4,
604 | "nbformat_minor": 4
605 | }
606 |
--------------------------------------------------------------------------------
/10-Sigma in pyomo.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "\n",
8 | "\n",
9 | " مثال هایی برای نحوه نمایش سیگما و انجام عملیات های مربوط به آن
"
10 | ]
11 | },
12 | {
13 | "cell_type": "code",
14 | "execution_count": 1,
15 | "metadata": {},
16 | "outputs": [],
17 | "source": [
18 | "import itertools\n",
19 | "import numpy as np\n",
20 | "import pyomo.environ as pyo\n",
21 | "m1 = pyo.ConcreteModel()"
22 | ]
23 | },
24 | {
25 | "cell_type": "code",
26 | "execution_count": 2,
27 | "metadata": {},
28 | "outputs": [],
29 | "source": [
30 | "m1.gas = pyo.Set(initialize=('gas1','gas2','gas3'))\n",
31 | "m1.oil = pyo.Set(initialize=('oil1','oil2','oil3'))"
32 | ]
33 | },
34 | {
35 | "cell_type": "code",
36 | "execution_count": 3,
37 | "metadata": {},
38 | "outputs": [
39 | {
40 | "name": "stdout",
41 | "output_type": "stream",
42 | "text": [
43 | "oil : Size=1, Index=None, Ordered=Insertion\n",
44 | " Key : Dimen : Domain : Size : Members\n",
45 | " None : 1 : Any : 3 : {'oil1', 'oil2', 'oil3'}\n"
46 | ]
47 | }
48 | ],
49 | "source": [
50 | "m1.oil.pprint()"
51 | ]
52 | },
53 | {
54 | "cell_type": "markdown",
55 | "metadata": {},
56 | "source": [
57 | "### Parameters"
58 | ]
59 | },
60 | {
61 | "cell_type": "code",
62 | "execution_count": 4,
63 | "metadata": {},
64 | "outputs": [],
65 | "source": [
66 | "# m1.gas_profit = pyo.Param(m1.gas, initialize = {'gas1':70, 'gas2':60, 'gas3':50} )\n",
67 | "# m1.oil_cost = pyo.Param(m1.oil, initialize = {'oil1':45, 'oil2':35, 'oil3':25} )\n",
68 | "# m1.demands = pyo.Param(m1.gas, initialize = {'gas1':3000, 'gas2':2000, 'gas3':1000})\n",
69 | "# m1.oilpurchase = pyo.Param(m1.oil, initialize = {'oil1':5000, 'oil2':5000, 'oil3':5000})\n",
70 | "# m1.oktan_portion = pyo.Param(m1.oil, initialize = {'oil1':12, 'oil2':6, 'oil3':8} )\n",
71 | "# m1.solfor_portion = pyo.Param(m1.oil, initialize = {'oil1':0.005, 'oil2':0.02, 'oil3':0.03})\n",
72 | "# m1.oktan_need = pyo.Param(m1.gas, initialize = {'gas1':10, 'gas2':8, 'gas3':6} )\n",
73 | "# m1.solfor_need = pyo.Param(m1.gas, initialize = {'gas1':0.01, 'gas2':0.02, 'gas3':0.01})\n"
74 | ]
75 | },
76 | {
77 | "cell_type": "markdown",
78 | "metadata": {},
79 | "source": [
80 | "### Variables"
81 | ]
82 | },
83 | {
84 | "cell_type": "code",
85 | "execution_count": 5,
86 | "metadata": {},
87 | "outputs": [
88 | {
89 | "name": "stdout",
90 | "output_type": "stream",
91 | "text": [
92 | "x : Size=9, Index=x_index\n",
93 | " Key : Lower : Value : Upper : Fixed : Stale : Domain\n",
94 | " ('oil1', 'gas1') : 0 : None : None : False : True : NonNegativeReals\n",
95 | " ('oil1', 'gas2') : 0 : None : None : False : True : NonNegativeReals\n",
96 | " ('oil1', 'gas3') : 0 : None : None : False : True : NonNegativeReals\n",
97 | " ('oil2', 'gas1') : 0 : None : None : False : True : NonNegativeReals\n",
98 | " ('oil2', 'gas2') : 0 : None : None : False : True : NonNegativeReals\n",
99 | " ('oil2', 'gas3') : 0 : None : None : False : True : NonNegativeReals\n",
100 | " ('oil3', 'gas1') : 0 : None : None : False : True : NonNegativeReals\n",
101 | " ('oil3', 'gas2') : 0 : None : None : False : True : NonNegativeReals\n",
102 | " ('oil3', 'gas3') : 0 : None : None : False : True : NonNegativeReals\n"
103 | ]
104 | }
105 | ],
106 | "source": [
107 | "m1.x = pyo.Var(m1.oil, m1.gas , domain = pyo.NonNegativeReals)\n",
108 | "m1.x.pprint()"
109 | ]
110 | },
111 | {
112 | "cell_type": "markdown",
113 | "metadata": {},
114 | "source": [
115 | "### Objective function"
116 | ]
117 | },
118 | {
119 | "cell_type": "markdown",
120 | "metadata": {
121 | "slideshow": {
122 | "slide_type": "slide"
123 | }
124 | },
125 | "source": [
126 | "$$\n",
127 | "Income = \\sum_{j=1}^3 gp_j \\sum_{i=1}^{3} x_{ij} = \\sum_{j=1}^3 \\sum_{i=1}^{3} gp_j x_{ij} \\\\\n",
128 | "$$"
129 | ]
130 | },
131 | {
132 | "cell_type": "code",
133 | "execution_count": 6,
134 | "metadata": {},
135 | "outputs": [
136 | {
137 | "name": "stdout",
138 | "output_type": "stream",
139 | "text": [
140 | "70*x[oil1,gas1] + 70*x[oil2,gas1] + 70*x[oil3,gas1] + 60*x[oil1,gas2] + 60*x[oil2,gas2] + 60*x[oil3,gas2] + 50*x[oil1,gas3] + 50*x[oil2,gas3] + 50*x[oil3,gas3]\n"
141 | ]
142 | }
143 | ],
144 | "source": [
145 | "m1.gas_profit = pyo.Param(m1.gas , initialize={'gas1':70,'gas2':60,'gas3':50})\n",
146 | "income = sum(m1.gas_profit[j] * m1.x[i,j] for j in m1.gas for i in m1.oil)\n",
147 | "print(income)"
148 | ]
149 | },
150 | {
151 | "cell_type": "markdown",
152 | "metadata": {},
153 | "source": [
154 | "$$\n",
155 | "Cost_1 = \\sum_{i=1}^{3} oc_i \\sum_{j=1}^{3} x_{ij} = \\sum_{i=1}^{3} \\sum_{j=1}^{3} oc_i x_{ij}\n",
156 | "$$"
157 | ]
158 | },
159 | {
160 | "cell_type": "code",
161 | "execution_count": 7,
162 | "metadata": {},
163 | "outputs": [
164 | {
165 | "name": "stdout",
166 | "output_type": "stream",
167 | "text": [
168 | "45*x[oil1,gas1] + 45*x[oil1,gas2] + 45*x[oil1,gas3] + 35*x[oil2,gas1] + 35*x[oil2,gas2] + 35*x[oil2,gas3] + 25*x[oil3,gas1] + 25*x[oil3,gas2] + 25*x[oil3,gas3]\n"
169 | ]
170 | }
171 | ],
172 | "source": [
173 | "m1.oil_cost = pyo.Param(m1.oil , initialize={'oil1':45,'oil2':35,'oil3':25} )\n",
174 | "cost_1 = sum (m1.oil_cost[i] * m1.x[i,j] for i in m1.oil for j in m1.gas)\n",
175 | "print(cost_1)"
176 | ]
177 | },
178 | {
179 | "cell_type": "markdown",
180 | "metadata": {},
181 | "source": [
182 | "$$\n",
183 | "Cost_2 = 4 \\sum_{i=1}^{3} \\sum_{j=1}^{3} x_{ij} \n",
184 | "$$"
185 | ]
186 | },
187 | {
188 | "cell_type": "code",
189 | "execution_count": 8,
190 | "metadata": {},
191 | "outputs": [
192 | {
193 | "name": "stdout",
194 | "output_type": "stream",
195 | "text": [
196 | "4*(x[oil1,gas1] + x[oil1,gas2] + x[oil1,gas3] + x[oil2,gas1] + x[oil2,gas2] + x[oil2,gas3] + x[oil3,gas1] + x[oil3,gas2] + x[oil3,gas3])\n"
197 | ]
198 | }
199 | ],
200 | "source": [
201 | "cost_2 = 4 * sum(m1.x[i,j] for i in m1.oil for j in m1.gas)\n",
202 | "print(cost_2)"
203 | ]
204 | },
205 | {
206 | "cell_type": "code",
207 | "execution_count": 9,
208 | "metadata": {},
209 | "outputs": [
210 | {
211 | "name": "stdout",
212 | "output_type": "stream",
213 | "text": [
214 | "obj : Size=1, Index=None, Active=True\n",
215 | " Key : Active : Sense : Expression\n",
216 | " None : True : maximize : 70*x[oil1,gas1] + 70*x[oil2,gas1] + 70*x[oil3,gas1] + 60*x[oil1,gas2] + 60*x[oil2,gas2] + 60*x[oil3,gas2] + 50*x[oil1,gas3] + 50*x[oil2,gas3] + 50*x[oil3,gas3] - (45*x[oil1,gas1] + 45*x[oil1,gas2] + 45*x[oil1,gas3] + 35*x[oil2,gas1] + 35*x[oil2,gas2] + 35*x[oil2,gas3] + 25*x[oil3,gas1] + 25*x[oil3,gas2] + 25*x[oil3,gas3]) - 4*(x[oil1,gas1] + x[oil1,gas2] + x[oil1,gas3] + x[oil2,gas1] + x[oil2,gas2] + x[oil2,gas3] + x[oil3,gas1] + x[oil3,gas2] + x[oil3,gas3])\n"
217 | ]
218 | }
219 | ],
220 | "source": [
221 | "m1.obj = pyo.Objective(expr = income - cost_1 - cost_2,\n",
222 | " sense = pyo.maximize)\n",
223 | "m1.obj.pprint()"
224 | ]
225 | },
226 | {
227 | "cell_type": "markdown",
228 | "metadata": {},
229 | "source": [
230 | "### Constraints"
231 | ]
232 | },
233 | {
234 | "cell_type": "markdown",
235 | "metadata": {},
236 | "source": [
237 | "$$\n",
238 | "\\sum_{i=1}^{3} x_{ij} = d_j \\quad \\quad \\forall j=1,...,3\n",
239 | "$$"
240 | ]
241 | },
242 | {
243 | "cell_type": "code",
244 | "execution_count": 10,
245 | "metadata": {},
246 | "outputs": [
247 | {
248 | "name": "stdout",
249 | "output_type": "stream",
250 | "text": [
251 | "c1 : Size=3, Index=gas, Active=True\n",
252 | " Key : Lower : Body : Upper : Active\n",
253 | " gas1 : 3000.0 : x[oil1,gas1] + x[oil2,gas1] + x[oil3,gas1] : 3000.0 : True\n",
254 | " gas2 : 2000.0 : x[oil1,gas2] + x[oil2,gas2] + x[oil3,gas2] : 2000.0 : True\n",
255 | " gas3 : 1000.0 : x[oil1,gas3] + x[oil2,gas3] + x[oil3,gas3] : 1000.0 : True\n"
256 | ]
257 | }
258 | ],
259 | "source": [
260 | "m1.demands = pyo.Param(m1.gas , initialize={'gas1':3000,'gas2':2000,'gas3':1000})\n",
261 | "def gas_demand (model, j):\n",
262 | " return sum(model.x[i,j] for i in model.oil) == model.demands[j]\n",
263 | "m1.c1 = pyo.Constraint(m1.gas , rule = gas_demand)\n",
264 | "m1.c1.pprint()"
265 | ]
266 | },
267 | {
268 | "cell_type": "code",
269 | "execution_count": 11,
270 | "metadata": {},
271 | "outputs": [],
272 | "source": [
273 | "# def gas_demand_test (model, j):\n",
274 | "# return sum(model.x[i,j] for i in model.oil) == model.demands[j]\n",
275 | "# print(gas_demand_test(m1, j='gas3'))"
276 | ]
277 | },
278 | {
279 | "cell_type": "markdown",
280 | "metadata": {},
281 | "source": [
282 | "$$\n",
283 | "\\sum_{j=1}^{3} x_{ij} \\leq p_i \\quad \\quad \\forall i=1,...,3\n",
284 | "$$"
285 | ]
286 | },
287 | {
288 | "cell_type": "code",
289 | "execution_count": 12,
290 | "metadata": {},
291 | "outputs": [
292 | {
293 | "name": "stdout",
294 | "output_type": "stream",
295 | "text": [
296 | "c2 : Size=3, Index=oil, Active=True\n",
297 | " Key : Lower : Body : Upper : Active\n",
298 | " oil1 : -Inf : x[oil1,gas1] + x[oil1,gas2] + x[oil1,gas3] : 5000.0 : True\n",
299 | " oil2 : -Inf : x[oil2,gas1] + x[oil2,gas2] + x[oil2,gas3] : 5000.0 : True\n",
300 | " oil3 : -Inf : x[oil3,gas1] + x[oil3,gas2] + x[oil3,gas3] : 5000.0 : True\n"
301 | ]
302 | }
303 | ],
304 | "source": [
305 | "m1.oil_purchase = pyo.Param(m1.oil , initialize = {'oil1':5000, 'oil2':5000 , 'oil3':5000})\n",
306 | "\n",
307 | "def oil_purchase(model, i):\n",
308 | " return sum(model.x[i,j] for j in model.gas) <= model.oil_purchase[i]\n",
309 | "m1.c2 = pyo.Constraint(m1.oil , rule = oil_purchase)\n",
310 | "m1.c2.pprint()"
311 | ]
312 | },
313 | {
314 | "cell_type": "markdown",
315 | "metadata": {},
316 | "source": [
317 | "$$\n",
318 | "\\sum_{i=1}^{3} \\sum_{j=1}^{3} x_{ij} \\leq 14000 \n",
319 | "$$"
320 | ]
321 | },
322 | {
323 | "cell_type": "code",
324 | "execution_count": 13,
325 | "metadata": {},
326 | "outputs": [
327 | {
328 | "name": "stdout",
329 | "output_type": "stream",
330 | "text": [
331 | "c3 : Size=1, Index=None, Active=True\n",
332 | " Key : Lower : Body : Upper : Active\n",
333 | " None : -Inf : x[oil1,gas1] + x[oil1,gas2] + x[oil1,gas3] + x[oil2,gas1] + x[oil2,gas2] + x[oil2,gas3] + x[oil3,gas1] + x[oil3,gas2] + x[oil3,gas3] : 14000.0 : True\n"
334 | ]
335 | }
336 | ],
337 | "source": [
338 | "m1.c3 = pyo.Constraint(expr = sum(m1.x[i,j] for i in m1.oil for j in m1.gas)<=14000)\n",
339 | "m1.c3.pprint()"
340 | ]
341 | },
342 | {
343 | "cell_type": "markdown",
344 | "metadata": {},
345 | "source": [
346 | "$$\n",
347 | "\\sum_{i=1}^{3} op_{i} x_{ij} \\geq \\ on_{j} \\sum_{i=1}^{3} x_{ij} \\quad \\forall j\n",
348 | "$$"
349 | ]
350 | },
351 | {
352 | "cell_type": "code",
353 | "execution_count": 14,
354 | "metadata": {},
355 | "outputs": [
356 | {
357 | "name": "stdout",
358 | "output_type": "stream",
359 | "text": [
360 | "c4 : Size=3, Index=gas, Active=True\n",
361 | " Key : Lower : Body : Upper : Active\n",
362 | " gas1 : -Inf : 10*(x[oil1,gas1] + x[oil2,gas1] + x[oil3,gas1]) - (12*x[oil1,gas1] + 6*x[oil2,gas1] + 8*x[oil3,gas1]) : 0.0 : True\n",
363 | " gas2 : -Inf : 8*(x[oil1,gas2] + x[oil2,gas2] + x[oil3,gas2]) - (12*x[oil1,gas2] + 6*x[oil2,gas2] + 8*x[oil3,gas2]) : 0.0 : True\n",
364 | " gas3 : -Inf : 6*(x[oil1,gas3] + x[oil2,gas3] + x[oil3,gas3]) - (12*x[oil1,gas3] + 6*x[oil2,gas3] + 8*x[oil3,gas3]) : 0.0 : True\n"
365 | ]
366 | }
367 | ],
368 | "source": [
369 | "m1.oktan_portion = pyo.Param(m1.oil , initialize ={'oil1':12,'oil2':6,'oil3':8})\n",
370 | "m1.oktan_need = pyo.Param(m1.gas ,initialize ={'gas1':10,'gas2':8,'gas3':6} )\n",
371 | "\n",
372 | "def oktan_constraint(model, j):\n",
373 | " return ( sum(model.oktan_portion[i] * model.x[i,j] for i in model.oil) >=\n",
374 | " model.oktan_need[j] * sum(model.x[i,j] for i in model.oil))\n",
375 | "m1.c4 = pyo.Constraint(m1.gas , rule= oktan_constraint)\n",
376 | "m1.c4.pprint()"
377 | ]
378 | },
379 | {
380 | "cell_type": "markdown",
381 | "metadata": {},
382 | "source": [
383 | "$$\n",
384 | "\\sum_{i=1}^{3} sp_{i} x_{ij} \\leq \\ sn_{j} \\sum_{i=1}^{3} x_{ij} \\quad \\forall j\n",
385 | "$$"
386 | ]
387 | },
388 | {
389 | "cell_type": "code",
390 | "execution_count": 15,
391 | "metadata": {},
392 | "outputs": [
393 | {
394 | "name": "stdout",
395 | "output_type": "stream",
396 | "text": [
397 | "c5 : Size=3, Index=gas, Active=True\n",
398 | " Key : Lower : Body : Upper : Active\n",
399 | " gas1 : -Inf : 0.005*x[oil1,gas1] + 0.02*x[oil2,gas1] + 0.03*x[oil3,gas1] - 0.01*(x[oil1,gas1] + x[oil2,gas1] + x[oil3,gas1]) : 0.0 : True\n",
400 | " gas2 : -Inf : 0.005*x[oil1,gas2] + 0.02*x[oil2,gas2] + 0.03*x[oil3,gas2] - 0.02*(x[oil1,gas2] + x[oil2,gas2] + x[oil3,gas2]) : 0.0 : True\n",
401 | " gas3 : -Inf : 0.005*x[oil1,gas3] + 0.02*x[oil2,gas3] + 0.03*x[oil3,gas3] - 0.01*(x[oil1,gas3] + x[oil2,gas3] + x[oil3,gas3]) : 0.0 : True\n"
402 | ]
403 | }
404 | ],
405 | "source": [
406 | "m1.solfor_portion = pyo.Param(m1.oil ,initialize ={'oil1':0.005,'oil2':0.02,'oil3':0.03})\n",
407 | "m1.solfor_need = pyo.Param(m1.gas ,initialize ={'gas1':0.01,'gas2':0.02,'gas3':0.01} )\n",
408 | "\n",
409 | "def solfor_constraint(model, j):\n",
410 | " return ( sum(model.solfor_portion[i] * model.x[i,j] for i in model.oil) <=\n",
411 | " model.solfor_need[j] * sum(model.x[i,j] for i in model.oil))\n",
412 | "m1.c5 = pyo.Constraint(m1.gas , rule= solfor_constraint)\n",
413 | "m1.c5.pprint()"
414 | ]
415 | },
416 | {
417 | "cell_type": "code",
418 | "execution_count": 18,
419 | "metadata": {},
420 | "outputs": [],
421 | "source": [
422 | "# ! pip install highspy\n",
423 | "solver_name = 'cplex'\n",
424 | "solver = pyo.SolverFactory(solver_name)\n",
425 | "result = solver.solve(m1)"
426 | ]
427 | },
428 | {
429 | "cell_type": "code",
430 | "execution_count": 19,
431 | "metadata": {},
432 | "outputs": [
433 | {
434 | "name": "stdout",
435 | "output_type": "stream",
436 | "text": [
437 | "optimal\n"
438 | ]
439 | }
440 | ],
441 | "source": [
442 | "print(result.solver.Termination_condition)"
443 | ]
444 | },
445 | {
446 | "cell_type": "code",
447 | "execution_count": 20,
448 | "metadata": {},
449 | "outputs": [
450 | {
451 | "name": "stdout",
452 | "output_type": "stream",
453 | "text": [
454 | "the optimal objective function = 126000.0\n"
455 | ]
456 | }
457 | ],
458 | "source": [
459 | "print(f'the optimal objective function = {pyo.value(m1.obj)}')"
460 | ]
461 | },
462 | {
463 | "cell_type": "code",
464 | "execution_count": 21,
465 | "metadata": {},
466 | "outputs": [
467 | {
468 | "name": "stdout",
469 | "output_type": "stream",
470 | "text": [
471 | "Value of x('oil1', 'gas1') = 2400.0\n",
472 | "Value of x('oil1', 'gas2') = 800.0\n",
473 | "Value of x('oil1', 'gas3') = 800.0\n",
474 | "Value of x('oil2', 'gas1') = 0.0\n",
475 | "Value of x('oil2', 'gas2') = 0.0\n",
476 | "Value of x('oil2', 'gas3') = 0.0\n",
477 | "Value of x('oil3', 'gas1') = 600.0\n",
478 | "Value of x('oil3', 'gas2') = 1200.0\n",
479 | "Value of x('oil3', 'gas3') = 200.0\n"
480 | ]
481 | }
482 | ],
483 | "source": [
484 | "for i , j in itertools.product(m1.oil,m1.gas):\n",
485 | " print(f'Value of x{i,j} = {np.round(pyo.value(m1.x[i,j]))}')"
486 | ]
487 | },
488 | {
489 | "cell_type": "code",
490 | "execution_count": 22,
491 | "metadata": {},
492 | "outputs": [
493 | {
494 | "name": "stdout",
495 | "output_type": "stream",
496 | "text": [
497 | "Value of gas1 = 3000.0\n",
498 | "------------------------------\n",
499 | "Value of gas2 = 2000.0\n",
500 | "------------------------------\n",
501 | "Value of gas3 = 1000.0\n",
502 | "------------------------------\n"
503 | ]
504 | }
505 | ],
506 | "source": [
507 | "for j in m1.gas:\n",
508 | " val = np.round(sum(pyo.value(m1.x[i,j]) for i in m1.oil))\n",
509 | " print(f'Value of {j} = {val}')\n",
510 | " print('-'*30)\n"
511 | ]
512 | }
513 | ],
514 | "metadata": {
515 | "kernelspec": {
516 | "display_name": "Python 3",
517 | "language": "python",
518 | "name": "python3"
519 | },
520 | "language_info": {
521 | "codemirror_mode": {
522 | "name": "ipython",
523 | "version": 3
524 | },
525 | "file_extension": ".py",
526 | "mimetype": "text/x-python",
527 | "name": "python",
528 | "nbconvert_exporter": "python",
529 | "pygments_lexer": "ipython3",
530 | "version": "3.11.5"
531 | },
532 | "orig_nbformat": 4
533 | },
534 | "nbformat": 4,
535 | "nbformat_minor": 2
536 | }
537 |
--------------------------------------------------------------------------------
/04-Data Structures.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "\n",
8 | "لیست\n",
9 | "
"
10 | ]
11 | },
12 | {
13 | "cell_type": "markdown",
14 | "metadata": {},
15 | "source": [
16 | "\n",
17 | "Syntax: List = [value1, value2, ..., valueN] "
18 | ]
19 | },
20 | {
21 | "cell_type": "code",
22 | "execution_count": null,
23 | "metadata": {},
24 | "outputs": [],
25 | "source": [
26 | "my_list = [3,4,6,10,8]"
27 | ]
28 | },
29 | {
30 | "cell_type": "markdown",
31 | "metadata": {},
32 | "source": [
33 | "
"
34 | ]
35 | },
36 | {
37 | "cell_type": "code",
38 | "execution_count": null,
39 | "metadata": {},
40 | "outputs": [
41 | {
42 | "data": {
43 | "text/plain": [
44 | "3"
45 | ]
46 | },
47 | "metadata": {},
48 | "output_type": "display_data"
49 | }
50 | ],
51 | "source": [
52 | "my_list = [3,4,6,10,8]\n",
53 | "my_list[0]"
54 | ]
55 | },
56 | {
57 | "cell_type": "code",
58 | "execution_count": null,
59 | "metadata": {},
60 | "outputs": [
61 | {
62 | "data": {
63 | "text/plain": [
64 | "8"
65 | ]
66 | },
67 | "metadata": {},
68 | "output_type": "display_data"
69 | }
70 | ],
71 | "source": [
72 | "my_list = [3,4,6,10,8]\n",
73 | "my_list[-1]"
74 | ]
75 | },
76 | {
77 | "cell_type": "code",
78 | "execution_count": 2,
79 | "metadata": {},
80 | "outputs": [
81 | {
82 | "data": {
83 | "text/plain": [
84 | "[3, 4]"
85 | ]
86 | },
87 | "execution_count": 2,
88 | "metadata": {},
89 | "output_type": "execute_result"
90 | }
91 | ],
92 | "source": [
93 | "my_list = [3,4,6,10,8]\n",
94 | "# my_list[start:end:step]\n",
95 | "#تا یکی مونده به آخری\n",
96 | "my_list[0:2]"
97 | ]
98 | },
99 | {
100 | "cell_type": "code",
101 | "execution_count": null,
102 | "metadata": {},
103 | "outputs": [
104 | {
105 | "data": {
106 | "text/plain": [
107 | "[3, 10]"
108 | ]
109 | },
110 | "metadata": {},
111 | "output_type": "display_data"
112 | }
113 | ],
114 | "source": [
115 | "my_list = [3,4,6,10,8]\n",
116 | "my_list[::3]"
117 | ]
118 | },
119 | {
120 | "cell_type": "code",
121 | "execution_count": null,
122 | "metadata": {},
123 | "outputs": [
124 | {
125 | "data": {
126 | "text/plain": [
127 | "[8, 10, 6, 4, 3]"
128 | ]
129 | },
130 | "metadata": {},
131 | "output_type": "display_data"
132 | }
133 | ],
134 | "source": [
135 | "my_list = [3,4,6,10,8]\n",
136 | "my_list[::-1]"
137 | ]
138 | },
139 | {
140 | "cell_type": "markdown",
141 | "metadata": {},
142 | "source": [
143 | "### Nested Lists"
144 | ]
145 | },
146 | {
147 | "cell_type": "markdown",
148 | "metadata": {},
149 | "source": [
150 | "
"
151 | ]
152 | },
153 | {
154 | "cell_type": "code",
155 | "execution_count": null,
156 | "metadata": {},
157 | "outputs": [],
158 | "source": [
159 | "L = ['a', 'b', ['cc', 'dd', ['eee', 'fff']], 'g', 'h']"
160 | ]
161 | },
162 | {
163 | "cell_type": "code",
164 | "execution_count": null,
165 | "metadata": {},
166 | "outputs": [
167 | {
168 | "name": "stdout",
169 | "output_type": "stream",
170 | "text": [
171 | "['cc', 'dd', ['eee', 'fff']]\n"
172 | ]
173 | }
174 | ],
175 | "source": [
176 | "print(L[2])"
177 | ]
178 | },
179 | {
180 | "cell_type": "code",
181 | "execution_count": null,
182 | "metadata": {},
183 | "outputs": [
184 | {
185 | "name": "stdout",
186 | "output_type": "stream",
187 | "text": [
188 | "['eee', 'fff']\n"
189 | ]
190 | }
191 | ],
192 | "source": [
193 | "print(L[2][2])"
194 | ]
195 | },
196 | {
197 | "cell_type": "code",
198 | "execution_count": null,
199 | "metadata": {},
200 | "outputs": [
201 | {
202 | "name": "stdout",
203 | "output_type": "stream",
204 | "text": [
205 | "eee\n"
206 | ]
207 | }
208 | ],
209 | "source": [
210 | "print(L[2][2][0])"
211 | ]
212 | },
213 | {
214 | "cell_type": "code",
215 | "execution_count": null,
216 | "metadata": {},
217 | "outputs": [
218 | {
219 | "data": {
220 | "text/plain": [
221 | "[3, 'Ali', 6, 10, 8]"
222 | ]
223 | },
224 | "metadata": {},
225 | "output_type": "display_data"
226 | }
227 | ],
228 | "source": [
229 | "my_list = [3,4,6,10,8]\n",
230 | "my_list[1] = 'Ali'\n",
231 | "my_list"
232 | ]
233 | },
234 | {
235 | "cell_type": "code",
236 | "execution_count": null,
237 | "metadata": {},
238 | "outputs": [
239 | {
240 | "data": {
241 | "text/plain": [
242 | "[3, 'Ali', 6, 10, 8, 3, 'Ali', 6, 10, 8]"
243 | ]
244 | },
245 | "metadata": {},
246 | "output_type": "display_data"
247 | }
248 | ],
249 | "source": [
250 | "my_list = [3, 'Ali', 6, 10, 8] * 2\n",
251 | "my_list"
252 | ]
253 | },
254 | {
255 | "cell_type": "code",
256 | "execution_count": null,
257 | "metadata": {},
258 | "outputs": [
259 | {
260 | "data": {
261 | "text/plain": [
262 | "[3, 'Ali', 6, 10, 8, 3, 'Ali', 6, 10, 8, 'Sattari', 20]"
263 | ]
264 | },
265 | "metadata": {},
266 | "output_type": "display_data"
267 | }
268 | ],
269 | "source": [
270 | "my_list = my_list + ['Sattari',20] \n",
271 | "my_list"
272 | ]
273 | },
274 | {
275 | "cell_type": "markdown",
276 | "metadata": {},
277 | "source": [
278 | "\n",
279 | "متد های لیست\n",
280 | "
"
281 | ]
282 | },
283 | {
284 | "cell_type": "code",
285 | "execution_count": null,
286 | "metadata": {},
287 | "outputs": [
288 | {
289 | "data": {
290 | "text/plain": [
291 | "[3, 'Ali', 6, 10, 8, 'Sattari']"
292 | ]
293 | },
294 | "metadata": {},
295 | "output_type": "display_data"
296 | }
297 | ],
298 | "source": [
299 | "my_list = [3, 'Ali', 6, 10, 8]\n",
300 | "my_list.append('Sattari')\n",
301 | "my_list"
302 | ]
303 | },
304 | {
305 | "cell_type": "code",
306 | "execution_count": null,
307 | "metadata": {},
308 | "outputs": [
309 | {
310 | "data": {
311 | "text/plain": [
312 | "['Sattari', 8, 10, 6, 'Ali', 3]"
313 | ]
314 | },
315 | "metadata": {},
316 | "output_type": "display_data"
317 | }
318 | ],
319 | "source": [
320 | "my_list.reverse()\n",
321 | "my_list"
322 | ]
323 | },
324 | {
325 | "cell_type": "code",
326 | "execution_count": null,
327 | "metadata": {},
328 | "outputs": [
329 | {
330 | "data": {
331 | "text/plain": [
332 | "['Sattari', ['Shalqam', 'piyaz'], 8, 10, 6, 'Ali', 3]"
333 | ]
334 | },
335 | "metadata": {},
336 | "output_type": "display_data"
337 | }
338 | ],
339 | "source": [
340 | "my_list.insert(1,['Shalqam','piyaz'])\n",
341 | "my_list"
342 | ]
343 | },
344 | {
345 | "cell_type": "markdown",
346 | "metadata": {},
347 | "source": [
348 | "\n",
349 | "درست همانند رشتهها، تابع\n",
350 | " len\n",
351 | " تعداد اعضا را بر میگرداند.\n",
352 | "
"
353 | ]
354 | },
355 | {
356 | "cell_type": "code",
357 | "execution_count": null,
358 | "metadata": {},
359 | "outputs": [
360 | {
361 | "data": {
362 | "text/plain": [
363 | "4"
364 | ]
365 | },
366 | "metadata": {},
367 | "output_type": "display_data"
368 | }
369 | ],
370 | "source": [
371 | "len(general_list)"
372 | ]
373 | },
374 | {
375 | "cell_type": "markdown",
376 | "metadata": {},
377 | "source": [
378 | "\n",
379 | "میتوان دو لیست را با یکدیگر ادغام کرد.\n",
380 | "
"
381 | ]
382 | },
383 | {
384 | "cell_type": "code",
385 | "execution_count": null,
386 | "metadata": {},
387 | "outputs": [
388 | {
389 | "name": "stdout",
390 | "output_type": "stream",
391 | "text": [
392 | "['Alireza', 41, 12.75, True, 1, 2, 3, 4, 5]\n",
393 | "[1, 2, 3, 4, 5]\n",
394 | "['Alireza', 41, 12.75, True]\n"
395 | ]
396 | }
397 | ],
398 | "source": [
399 | "print(general_list + num_list)\n",
400 | "print(num_list)\n",
401 | "print(general_list)"
402 | ]
403 | },
404 | {
405 | "cell_type": "markdown",
406 | "metadata": {},
407 | "source": [
408 | "\n",
409 | "میتوان لیست را با نشانه\n",
410 | "*\n",
411 | "تکرار کرد.\n",
412 | "
"
413 | ]
414 | },
415 | {
416 | "cell_type": "code",
417 | "execution_count": null,
418 | "metadata": {},
419 | "outputs": [
420 | {
421 | "data": {
422 | "text/plain": [
423 | "[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]"
424 | ]
425 | },
426 | "metadata": {},
427 | "output_type": "display_data"
428 | }
429 | ],
430 | "source": [
431 | "num_list * 3"
432 | ]
433 | },
434 | {
435 | "cell_type": "markdown",
436 | "metadata": {},
437 | "source": [
438 | "\n",
439 | "تاپل\n",
440 | "
"
441 | ]
442 | },
443 | {
444 | "cell_type": "markdown",
445 | "metadata": {},
446 | "source": [
447 | "Syntax: Tuple = (Value1, Value2, ... , ValueN)\n",
448 | "* همون لیست های تغییر ناپذیر"
449 | ]
450 | },
451 | {
452 | "cell_type": "code",
453 | "execution_count": null,
454 | "metadata": {},
455 | "outputs": [],
456 | "source": [
457 | "my_tuple = (3, 'Ali', 6, 10, 8)"
458 | ]
459 | },
460 | {
461 | "cell_type": "code",
462 | "execution_count": null,
463 | "metadata": {},
464 | "outputs": [
465 | {
466 | "data": {
467 | "text/plain": [
468 | "3"
469 | ]
470 | },
471 | "metadata": {},
472 | "output_type": "display_data"
473 | }
474 | ],
475 | "source": [
476 | "my_tuple[0]"
477 | ]
478 | },
479 | {
480 | "cell_type": "code",
481 | "execution_count": null,
482 | "metadata": {},
483 | "outputs": [
484 | {
485 | "ename": "TypeError",
486 | "evalue": "'tuple' object does not support item assignment",
487 | "output_type": "error",
488 | "traceback": [
489 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n",
490 | "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)\n",
491 | "\u001b[1;32me:\\University\\Modeling and optimization in Python\\OptimizationwithPython\\codes\\Unit 02-Data Structures.ipynb Cell 30\u001b[0m line \u001b[0;36m1\n",
492 | "\u001b[1;32m----> 1\u001b[0m my_tuple[\u001b[39m0\u001b[39;49m] \u001b[39m=\u001b[39m \u001b[39m10\u001b[39m\n",
493 | "\n",
494 | "\u001b[1;31mTypeError\u001b[0m: 'tuple' object does not support item assignment"
495 | ]
496 | }
497 | ],
498 | "source": [
499 | "my_tuple[0] = 10"
500 | ]
501 | },
502 | {
503 | "cell_type": "markdown",
504 | "metadata": {},
505 | "source": [
506 | "\n",
507 | "مجموعه ها\n",
508 | "
"
509 | ]
510 | },
511 | {
512 | "cell_type": "markdown",
513 | "metadata": {},
514 | "source": [
515 | "Syntax: Set = {Value1, Value2, ... , ValueN}\n",
516 | "* فقط منحصر به فرد\n",
517 | "* تغییر ناپذیر\n",
518 | "* بدون ترتیب\n",
519 | "* بدون آدرسی دهی اندیسی"
520 | ]
521 | },
522 | {
523 | "cell_type": "code",
524 | "execution_count": null,
525 | "metadata": {},
526 | "outputs": [
527 | {
528 | "data": {
529 | "text/plain": [
530 | "{1, 10.8, 2, 3, 'Ali', 'Sattari'}"
531 | ]
532 | },
533 | "metadata": {},
534 | "output_type": "display_data"
535 | }
536 | ],
537 | "source": [
538 | "my_set = {1,2,2,3,3,3,3,'Sattari','Sattari',10.8,'Ali'}\n",
539 | "my_set"
540 | ]
541 | },
542 | {
543 | "cell_type": "code",
544 | "execution_count": null,
545 | "metadata": {},
546 | "outputs": [
547 | {
548 | "ename": "TypeError",
549 | "evalue": "'set' object is not subscriptable",
550 | "output_type": "error",
551 | "traceback": [
552 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n",
553 | "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)\n",
554 | "\u001b[1;32me:\\University\\Modeling and optimization in Python\\OptimizationwithPython\\codes\\Unit 02-Data Structures.ipynb Cell 34\u001b[0m line \u001b[0;36m1\n",
555 | "\u001b[1;32m----> 1\u001b[0m my_set[\u001b[39m1\u001b[39;49m]\n",
556 | "\n",
557 | "\u001b[1;31mTypeError\u001b[0m: 'set' object is not subscriptable"
558 | ]
559 | }
560 | ],
561 | "source": [
562 | "my_set[1]"
563 | ]
564 | },
565 | {
566 | "cell_type": "code",
567 | "execution_count": null,
568 | "metadata": {},
569 | "outputs": [
570 | {
571 | "ename": "TypeError",
572 | "evalue": "'set' object does not support item assignment",
573 | "output_type": "error",
574 | "traceback": [
575 | "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n",
576 | "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)\n",
577 | "\u001b[1;32me:\\University\\Modeling and optimization in Python\\OptimizationwithPython\\codes\\Unit 02-Data Structures.ipynb Cell 35\u001b[0m line \u001b[0;36m1\n",
578 | "\u001b[1;32m----> 1\u001b[0m my_set[\u001b[39m1\u001b[39;49m] \u001b[39m=\u001b[39m \u001b[39m4\u001b[39m\n",
579 | "\n",
580 | "\u001b[1;31mTypeError\u001b[0m: 'set' object does not support item assignment"
581 | ]
582 | }
583 | ],
584 | "source": [
585 | "my_set[1] = 4"
586 | ]
587 | },
588 | {
589 | "cell_type": "code",
590 | "execution_count": null,
591 | "metadata": {},
592 | "outputs": [
593 | {
594 | "data": {
595 | "text/plain": [
596 | "{1, 10.8, 2, 3, 'Ali', 'Sattari'}"
597 | ]
598 | },
599 | "metadata": {},
600 | "output_type": "display_data"
601 | }
602 | ],
603 | "source": [
604 | "s1 = set([1,2,2,3,3,3,3,'Sattari','Sattari',10.8,'Ali'])\n",
605 | "s1"
606 | ]
607 | },
608 | {
609 | "cell_type": "code",
610 | "execution_count": null,
611 | "metadata": {},
612 | "outputs": [
613 | {
614 | "data": {
615 | "text/plain": [
616 | "{'O', 'a', 'i', 'm', 'n', 'o', 'p', 't', 'z'}"
617 | ]
618 | },
619 | "metadata": {},
620 | "output_type": "display_data"
621 | }
622 | ],
623 | "source": [
624 | "s2 = set('Optimization')\n",
625 | "s2"
626 | ]
627 | },
628 | {
629 | "cell_type": "code",
630 | "execution_count": null,
631 | "metadata": {},
632 | "outputs": [
633 | {
634 | "data": {
635 | "text/plain": [
636 | "[10, 15, 45, 78, 98, 52]"
637 | ]
638 | },
639 | "metadata": {},
640 | "output_type": "display_data"
641 | }
642 | ],
643 | "source": [
644 | "# یک لیست\n",
645 | "my_list = [10,15,45,78,98,52]\n",
646 | "my_list"
647 | ]
648 | },
649 | {
650 | "cell_type": "code",
651 | "execution_count": null,
652 | "metadata": {},
653 | "outputs": [
654 | {
655 | "data": {
656 | "text/plain": [
657 | "{10, 15, 45, 52, 78, 98}"
658 | ]
659 | },
660 | "metadata": {},
661 | "output_type": "display_data"
662 | }
663 | ],
664 | "source": [
665 | "# تبدیل لیست به مجموعه\n",
666 | "l_to_s = set(my_list)\n",
667 | "l_to_s"
668 | ]
669 | },
670 | {
671 | "cell_type": "code",
672 | "execution_count": null,
673 | "metadata": {},
674 | "outputs": [
675 | {
676 | "data": {
677 | "text/plain": [
678 | "{10, 15, 45, 52, 78, 98}"
679 | ]
680 | },
681 | "metadata": {},
682 | "output_type": "display_data"
683 | }
684 | ],
685 | "source": [
686 | "# تبدیل مستقیم\n",
687 | "s3 = set([10,15,45,78,98,52])\n",
688 | "s3"
689 | ]
690 | },
691 | {
692 | "cell_type": "code",
693 | "execution_count": null,
694 | "metadata": {},
695 | "outputs": [
696 | {
697 | "data": {
698 | "text/plain": [
699 | "[1, 2, 3, 10.8, 'Sattari', 'Ali']"
700 | ]
701 | },
702 | "metadata": {},
703 | "output_type": "display_data"
704 | }
705 | ],
706 | "source": [
707 | "#تبدیل مجموعه به لیست \n",
708 | "list1 = list(s1)\n",
709 | "list1"
710 | ]
711 | },
712 | {
713 | "cell_type": "code",
714 | "execution_count": null,
715 | "metadata": {},
716 | "outputs": [
717 | {
718 | "data": {
719 | "text/plain": [
720 | "['A', 'l', 'i']"
721 | ]
722 | },
723 | "metadata": {},
724 | "output_type": "display_data"
725 | }
726 | ],
727 | "source": [
728 | "list2 = list('Ali')\n",
729 | "list2"
730 | ]
731 | },
732 | {
733 | "cell_type": "code",
734 | "execution_count": null,
735 | "metadata": {},
736 | "outputs": [
737 | {
738 | "data": {
739 | "text/plain": [
740 | "(1, 2, 3, 10.8, 'Sattari', 'Ali')"
741 | ]
742 | },
743 | "metadata": {},
744 | "output_type": "display_data"
745 | }
746 | ],
747 | "source": [
748 | "tuple1 = tuple(list1)\n",
749 | "tuple1"
750 | ]
751 | },
752 | {
753 | "cell_type": "code",
754 | "execution_count": null,
755 | "metadata": {},
756 | "outputs": [
757 | {
758 | "data": {
759 | "text/plain": [
760 | "{1, 10.8, 2, 3, 'Ali', 'N', 'Sattari', 'U', 'Z'}"
761 | ]
762 | },
763 | "metadata": {},
764 | "output_type": "display_data"
765 | }
766 | ],
767 | "source": [
768 | "# اجتماع مجموعه ها\n",
769 | "s1 = set([1, 2, 3, 10.8, 'Sattari', 'Ali'])\n",
770 | "s2 = set('ZNU')\n",
771 | "s1.union(s2)\n",
772 | "# s1 | s2"
773 | ]
774 | },
775 | {
776 | "cell_type": "code",
777 | "execution_count": null,
778 | "metadata": {},
779 | "outputs": [
780 | {
781 | "data": {
782 | "text/plain": [
783 | "{2, 3, 10.8}"
784 | ]
785 | },
786 | "metadata": {},
787 | "output_type": "display_data"
788 | }
789 | ],
790 | "source": [
791 | "# اشتراک مجموعه ها\n",
792 | "s1 = set([1, 2, 3, 10.8, 'Sattari', 'Ali'])\n",
793 | "s2 = set([3,45,67,2,10.8,36,55])\n",
794 | "# s1.intersection(s2)\n",
795 | "s1 & s2"
796 | ]
797 | },
798 | {
799 | "cell_type": "code",
800 | "execution_count": null,
801 | "metadata": {},
802 | "outputs": [
803 | {
804 | "data": {
805 | "text/plain": [
806 | "{1, 10.8, 3, 'Ali', 'Sattari'}"
807 | ]
808 | },
809 | "metadata": {},
810 | "output_type": "display_data"
811 | }
812 | ],
813 | "source": [
814 | "# تفاضل مجموعه ها\n",
815 | "s1 = set([1, 2, 3, 10.8, 'Sattari', 'Ali'])\n",
816 | "s2 = set([45,67,2,36,55])\n",
817 | "# s1.difference(s2)\n",
818 | "s1 - s2"
819 | ]
820 | },
821 | {
822 | "cell_type": "markdown",
823 | "metadata": {},
824 | "source": [
825 | "\n",
826 | "دیکشنری\n",
827 | "
"
828 | ]
829 | },
830 | {
831 | "cell_type": "markdown",
832 | "metadata": {},
833 | "source": [
834 | "\n",
835 | "**D =** { key : value , key : value , ... , key : value } \n",
836 | "\n"
837 | ]
838 | },
839 | {
840 | "cell_type": "code",
841 | "execution_count": null,
842 | "metadata": {},
843 | "outputs": [
844 | {
845 | "data": {
846 | "text/plain": [
847 | "{'Brazil': 'Rio', 'Germany': 'Berlin', 'Iran': 'Tehran'}"
848 | ]
849 | },
850 | "metadata": {},
851 | "output_type": "display_data"
852 | }
853 | ],
854 | "source": [
855 | "my_dict = {'Brazil' : 'Rio', 'Germany' : 'Berlin', 'Iran' : 'Tehran'}\n",
856 | "my_dict"
857 | ]
858 | },
859 | {
860 | "cell_type": "code",
861 | "execution_count": null,
862 | "metadata": {},
863 | "outputs": [
864 | {
865 | "data": {
866 | "text/plain": [
867 | "{'Brazil': 'Rio', 'Germany': 'Berlin', 'Iran': 'Tehran'}"
868 | ]
869 | },
870 | "metadata": {},
871 | "output_type": "display_data"
872 | }
873 | ],
874 | "source": [
875 | "# another way to create a dictionary\n",
876 | "my_dict = dict( Brazil = 'Rio', Germany = 'Berlin', Iran = 'Tehran')\n",
877 | "my_dict"
878 | ]
879 | },
880 | {
881 | "cell_type": "code",
882 | "execution_count": null,
883 | "metadata": {},
884 | "outputs": [
885 | {
886 | "data": {
887 | "text/plain": [
888 | "{('p1', 1): 200, ('p1', 2): 300, ('p2', 1): 100, ('p2', 2): 400}"
889 | ]
890 | },
891 | "metadata": {},
892 | "output_type": "display_data"
893 | }
894 | ],
895 | "source": [
896 | "demands = {('p1',1):200, ('p1',2):300, ('p2',1):100 , ('p2',2):400}\n",
897 | "demands"
898 | ]
899 | },
900 | {
901 | "cell_type": "code",
902 | "execution_count": null,
903 | "metadata": {},
904 | "outputs": [
905 | {
906 | "data": {
907 | "text/plain": [
908 | "300"
909 | ]
910 | },
911 | "metadata": {},
912 | "output_type": "display_data"
913 | }
914 | ],
915 | "source": [
916 | "demands[('p1',2)]"
917 | ]
918 | },
919 | {
920 | "cell_type": "code",
921 | "execution_count": null,
922 | "metadata": {},
923 | "outputs": [
924 | {
925 | "name": "stdout",
926 | "output_type": "stream",
927 | "text": [
928 | "{('p1', 1): 200, ('p1', 2): 800, ('p2', 1): 100, ('p2', 2): 400}\n"
929 | ]
930 | }
931 | ],
932 | "source": [
933 | "demands[('p1',2)] = 800\n",
934 | "print(demands)"
935 | ]
936 | },
937 | {
938 | "cell_type": "code",
939 | "execution_count": null,
940 | "metadata": {},
941 | "outputs": [
942 | {
943 | "data": {
944 | "text/plain": [
945 | "{('p1', 1): 200,\n",
946 | " ('p1', 2): 800,\n",
947 | " ('p2', 1): 100,\n",
948 | " ('p2', 2): 400,\n",
949 | " ('p3', 1): 500}"
950 | ]
951 | },
952 | "metadata": {},
953 | "output_type": "display_data"
954 | }
955 | ],
956 | "source": [
957 | "demands[('p3',1)] = 500\n",
958 | "demands"
959 | ]
960 | },
961 | {
962 | "cell_type": "code",
963 | "execution_count": null,
964 | "metadata": {},
965 | "outputs": [
966 | {
967 | "data": {
968 | "text/plain": [
969 | "True"
970 | ]
971 | },
972 | "metadata": {},
973 | "output_type": "display_data"
974 | }
975 | ],
976 | "source": [
977 | "('p1',1) in demands"
978 | ]
979 | },
980 | {
981 | "cell_type": "code",
982 | "execution_count": null,
983 | "metadata": {},
984 | "outputs": [
985 | {
986 | "data": {
987 | "text/plain": [
988 | "dict_items([(('p1', 1), 200), (('p1', 2), 800), (('p2', 1), 100), (('p2', 2), 400), (('p3', 1), 500)])"
989 | ]
990 | },
991 | "metadata": {},
992 | "output_type": "display_data"
993 | }
994 | ],
995 | "source": [
996 | "demands.items()"
997 | ]
998 | },
999 | {
1000 | "cell_type": "code",
1001 | "execution_count": null,
1002 | "metadata": {},
1003 | "outputs": [
1004 | {
1005 | "data": {
1006 | "text/plain": [
1007 | "[(('p1', 1), 200),\n",
1008 | " (('p1', 2), 800),\n",
1009 | " (('p2', 1), 100),\n",
1010 | " (('p2', 2), 400),\n",
1011 | " (('p3', 1), 500)]"
1012 | ]
1013 | },
1014 | "metadata": {},
1015 | "output_type": "display_data"
1016 | }
1017 | ],
1018 | "source": [
1019 | "list(demands.items())"
1020 | ]
1021 | },
1022 | {
1023 | "cell_type": "code",
1024 | "execution_count": null,
1025 | "metadata": {},
1026 | "outputs": [
1027 | {
1028 | "data": {
1029 | "text/plain": [
1030 | "dict_keys([('p1', 1), ('p1', 2), ('p2', 1), ('p2', 2), ('p3', 1)])"
1031 | ]
1032 | },
1033 | "metadata": {},
1034 | "output_type": "display_data"
1035 | }
1036 | ],
1037 | "source": [
1038 | "demands.keys()"
1039 | ]
1040 | },
1041 | {
1042 | "cell_type": "code",
1043 | "execution_count": null,
1044 | "metadata": {},
1045 | "outputs": [],
1046 | "source": [
1047 | "list(demands.keys())"
1048 | ]
1049 | },
1050 | {
1051 | "cell_type": "code",
1052 | "execution_count": null,
1053 | "metadata": {},
1054 | "outputs": [],
1055 | "source": [
1056 | "demands.values()"
1057 | ]
1058 | },
1059 | {
1060 | "cell_type": "code",
1061 | "execution_count": null,
1062 | "metadata": {},
1063 | "outputs": [],
1064 | "source": [
1065 | "list(demands.values())"
1066 | ]
1067 | },
1068 | {
1069 | "cell_type": "code",
1070 | "execution_count": null,
1071 | "metadata": {},
1072 | "outputs": [],
1073 | "source": [
1074 | "demands.get(('p1',1))\n",
1075 | "# demands[('p1',1)]"
1076 | ]
1077 | },
1078 | {
1079 | "cell_type": "code",
1080 | "execution_count": null,
1081 | "metadata": {},
1082 | "outputs": [],
1083 | "source": [
1084 | "demands[('p1',3)]"
1085 | ]
1086 | },
1087 | {
1088 | "cell_type": "code",
1089 | "execution_count": null,
1090 | "metadata": {},
1091 | "outputs": [],
1092 | "source": [
1093 | "demands.get(('p1',3))"
1094 | ]
1095 | },
1096 | {
1097 | "cell_type": "code",
1098 | "execution_count": null,
1099 | "metadata": {},
1100 | "outputs": [],
1101 | "source": [
1102 | "demands.get(('p1',3) , 0)"
1103 | ]
1104 | },
1105 | {
1106 | "cell_type": "code",
1107 | "execution_count": null,
1108 | "metadata": {},
1109 | "outputs": [],
1110 | "source": [
1111 | "demands.get(('p1',2) , 0)"
1112 | ]
1113 | }
1114 | ],
1115 | "metadata": {
1116 | "kernelspec": {
1117 | "display_name": "Python 3",
1118 | "language": "python",
1119 | "name": "python3"
1120 | },
1121 | "language_info": {
1122 | "codemirror_mode": {
1123 | "name": "ipython",
1124 | "version": 3
1125 | },
1126 | "file_extension": ".py",
1127 | "mimetype": "text/x-python",
1128 | "name": "python",
1129 | "nbconvert_exporter": "python",
1130 | "pygments_lexer": "ipython3",
1131 | "version": "3.12.5"
1132 | }
1133 | },
1134 | "nbformat": 4,
1135 | "nbformat_minor": 4
1136 | }
1137 |
--------------------------------------------------------------------------------