import pulp
print( pulp.listSolvers() ) # tieto solvery vie tvoja verzia PuLPu použiť
print( pulp.listSolvers(onlyAvailable = True) ) # tieto má naozaj dostupné
--------------------------------------------------------------------------- ModuleNotFoundError Traceback (most recent call last) Cell In[3], line 1 ----> 1 import pulp 2 print( pulp.listSolvers() ) # tieto solvery vie tvoja verzia PuLPu použiť 3 print( pulp.listSolvers(onlyAvailable = True) ) ModuleNotFoundError: No module named 'pulp'
!pip install pulp
Defaulting to user installation because normal site-packages is not writeable
Collecting pulp
Obtaining dependency information for pulp from https://files.pythonhosted.org/packages/99/6c/64cafaceea3f99927e84b38a362ec6a8f24f33061c90bda77dfe1cd4c3c6/pulp-3.3.0-py3-none-any.whl.metadata
Downloading pulp-3.3.0-py3-none-any.whl.metadata (8.4 kB)
Downloading pulp-3.3.0-py3-none-any.whl (16.4 MB)
---------------------------------------- 0.0/16.4 MB ? eta -:--:--
---------------------------------------- 0.0/16.4 MB ? eta -:--:--
---------------------------------------- 0.1/16.4 MB 825.8 kB/s eta 0:00:20
--------------------------------------- 0.4/16.4 MB 3.2 MB/s eta 0:00:06
-- ------------------------------------- 0.9/16.4 MB 5.7 MB/s eta 0:00:03
--- ------------------------------------ 1.6/16.4 MB 7.1 MB/s eta 0:00:03
----- ---------------------------------- 2.3/16.4 MB 9.1 MB/s eta 0:00:02
------- -------------------------------- 3.2/16.4 MB 10.8 MB/s eta 0:00:02
---------- ----------------------------- 4.2/16.4 MB 11.7 MB/s eta 0:00:02
------------- -------------------------- 5.5/16.4 MB 14.0 MB/s eta 0:00:01
---------------- ----------------------- 6.9/16.4 MB 15.3 MB/s eta 0:00:01
--------------------- ------------------ 8.7/16.4 MB 18.0 MB/s eta 0:00:01
-------------------------- ------------- 10.8/16.4 MB 25.2 MB/s eta 0:00:01
-------------------------------- ------- 13.3/16.4 MB 34.4 MB/s eta 0:00:01
--------------------------------------- 16.3/16.4 MB 50.4 MB/s eta 0:00:01
--------------------------------------- 16.4/16.4 MB 46.9 MB/s eta 0:00:01
---------------------------------------- 16.4/16.4 MB 38.6 MB/s eta 0:00:00
Installing collected packages: pulp
Successfully installed pulp-3.3.0
DEPRECATION: Loading egg at c:\programdata\anaconda3\lib\site-packages\vboxapi-1.0-py3.11.egg is deprecated. pip 23.3 will enforce this behaviour change. A possible replacement is to use pip for package installation.. WARNING: The script pulptest.exe is installed in 'C:\Users\Katedra\AppData\Roaming\Python\Python311\Scripts' which is not on PATH. Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
import pulp
print( pulp.listSolvers() ) # tieto solvery vie tvoja verzia PuLPu použiť
print( pulp.listSolvers(onlyAvailable = True) ) # tieto má naozaj dostupné
['CyLP', 'GLPK_CMD', 'PYGLPK', 'CPLEX_CMD', 'CPLEX_PY', 'GUROBI', 'GUROBI_CMD', 'MOSEK', 'XPRESS', 'XPRESS', 'XPRESS_PY', 'PULP_CBC_CMD', 'COIN_CMD', 'COINMP_DLL', 'CHOCO_CMD', 'MIPCL_CMD', 'SCIP_CMD', 'FSCIP_CMD', 'SCIP_PY', 'HiGHS', 'HiGHS_CMD', 'COPT', 'COPT_DLL', 'COPT_CMD', 'SAS94', 'SASCAS', 'CUOPT'] ['PULP_CBC_CMD']
import pulp
# vyrobíme si nový optimalizačný problém, v ktorom chceme maximalizovať
problem = pulp.LpProblem('Nugetky', pulp.LpMaximize)
# zadefinujeme si premenné, ktoré chceme používať
# cat ("category") je typ premennej, my budeme používať 'Integer' a 'Binary'
x1 = pulp.LpVariable('x1', cat='Integer', lowBound=0)
x2 = pulp.LpVariable('x2', cat='Integer', lowBound=0)
x3 = pulp.LpVariable('x3', cat='Integer', lowBound=0)
# do problému vieme pridávať nové informácie pomocou +=
# ak takto pridáme lineárny výraz z premenných a konštánt, pochopí ho ako cieľ
# ak pridáme podmienku, pochopí ju ako obmedzenie
problem += 6*x1 + 9*x2 + 20*x3 # cieľ
problem += 200*x1 + 290*x2 + 610*x3 <= 3200 # obmedzenie
# ak chceme, môžeme si problém dať vypísať a skontrolovať si ho
# print(problem)
# ak chceme, môžeme si problém dať uložiť do súboru vo formáte, ktorému rozumie viacero solverov
# problem.writeMPS('nugetky.mps')
# spustíme solver
status = problem.solve()
# alternatíva: použitie iného solveru
# status = problem.solve( pulp.GLPK_CMD(msg=False) ) # msg=False vypne tomuto solveru výstup na stdout
# skontrolujeme, že solver našiel optimálne riešenie
assert pulp.LpStatus[status] == 'Optimal'
# vypíšeme si hodnotu riešenia a následne hodnoty jednotlivých premenných
# pulp nám interne vráti floaty, my vieme, že naše odpovede sú celé čísla, pre istotu ich pri konverzii zaokrúhlime
def to_int(x): return int(round(x))
# pulp.value nám vypočíta hodnotu výrazu obsahujúceho premenné, napr. cieľu, ktorý sme optimalizovali
print( 'optimálny počet nugetiek:', to_int( pulp.value( problem.objective ) ) )
# premenné aj samé poznajú svoju hodnotu, ale rovnako sme mohli použiť pulp.value(premenna)
for premenna in [x1, x2, x3]: print( premenna.name, '=', to_int(premenna.varValue) )
optimálny počet nugetiek: 102 x1 = 1 x2 = 4 x3 = 3
import pulp
# vyrobíme si nový optimalizačný problém, v ktorom chceme maximalizovať
problem = pulp.LpProblem('Nugetky', pulp.LpMaximize)
# zadefinujeme si premenné, ktoré chceme používať
# cat ("category") je typ premennej, my budeme používať 'Integer' a 'Binary'
x1 = pulp.LpVariable('x1', cat='Integer', lowBound=0)
x2 = pulp.LpVariable('x2', cat='Bin')
# do problému vieme pridávať nové informácie pomocou +=
# ak takto pridáme lineárny výraz z premenných a konštánt, pochopí ho ako cieľ
# ak pridáme podmienku, pochopí ju ako obmedzenie
problem += 6*x1 + 9*x2 # cieľ
problem += 200*x1 + x1*x2 <= 3200 # obmedzenie
# ak chceme, môžeme si problém dať vypísať a skontrolovať si ho
# print(problem)
# ak chceme, môžeme si problém dať uložiť do súboru vo formáte, ktorému rozumie viacero solverov
# problem.writeMPS('nugetky.mps')
# spustíme solver
status = problem.solve()
# alternatíva: použitie iného solveru
# status = problem.solve( pulp.GLPK_CMD(msg=False) ) # msg=False vypne tomuto solveru výstup na stdout
# skontrolujeme, že solver našiel optimálne riešenie
assert pulp.LpStatus[status] == 'Optimal'
# vypíšeme si hodnotu riešenia a následne hodnoty jednotlivých premenných
# pulp nám interne vráti floaty, my vieme, že naše odpovede sú celé čísla, pre istotu ich pri konverzii zaokrúhlime
def to_int(x): return int(round(x))
# pulp.value nám vypočíta hodnotu výrazu obsahujúceho premenné, napr. cieľu, ktorý sme optimalizovali
print( 'optimálny počet nugetiek:', to_int( pulp.value( problem.objective ) ) )
# premenné aj samé poznajú svoju hodnotu, ale rovnako sme mohli použiť pulp.value(premenna)
for premenna in [x1, x2, x3]: print( premenna.name, '=', to_int(premenna.varValue) )
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[7], line 19 13 # do problému vieme pridávať nové informácie pomocou += 14 # ak takto pridáme lineárny výraz z premenných a konštánt, pochopí ho ako cieľ 15 # ak pridáme podmienku, pochopí ju ako obmedzenie 17 problem += 6*x1 + 9*x2 # cieľ ---> 19 problem += 200*x1 + x1*x2 <= 3200 # obmedzenie 21 # ak chceme, môžeme si problém dať vypísať a skontrolovať si ho 22 # print(problem) 23 (...) 26 27 # spustíme solver 29 status = problem.solve() File ~\AppData\Roaming\Python\Python311\site-packages\pulp\pulp.py:218, in LpElement.__mul__(self, other) 217 def __mul__(self, other): --> 218 return LpAffineExpression(self) * other File ~\AppData\Roaming\Python\Python311\site-packages\pulp\pulp.py:1028, in LpAffineExpression.__mul__(self, other) 1026 e[v] = c * x 1027 elif isinstance(other, LpVariable): -> 1028 return self * LpAffineExpression(other) 1029 else: 1030 if not math.isfinite(other): File ~\AppData\Roaming\Python\Python311\site-packages\pulp\pulp.py:1016, in LpAffineExpression.__mul__(self, other) 1014 if len(other): 1015 if len(self): -> 1016 raise TypeError("Non-constant expressions cannot be multiplied") 1017 else: 1018 c = self.constant TypeError: Non-constant expressions cannot be multiplied
16*33
528
from math import log
log(528, 2) #10 bitov na sucet
9.044394119358454
$1+2+3+4+...+n = \frac{n.(n+1)}{2}$