Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ggeop/rod-cutting-problem-greedy
Rod cutting optimization problem with greedy :hammer: :wrench:
https://github.com/ggeop/rod-cutting-problem-greedy
cutting-planes greedy-algorithms jupyter-notebook optimization-algorithms python
Last synced: 18 days ago
JSON representation
Rod cutting optimization problem with greedy :hammer: :wrench:
- Host: GitHub
- URL: https://github.com/ggeop/rod-cutting-problem-greedy
- Owner: ggeop
- Created: 2019-01-11T23:50:12.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2019-01-11T23:51:27.000Z (almost 6 years ago)
- Last Synced: 2024-12-06T19:01:49.876Z (27 days ago)
- Topics: cutting-planes, greedy-algorithms, jupyter-notebook, optimization-algorithms, python
- Language: Jupyter Notebook
- Homepage:
- Size: 1.95 KB
- Stars: 0
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Rod Cutting Problem
### Requirenments
You have rodes with the same length and you have also a list with cutting lengths.### Problem
How to assign the cuts in order to minimize the number of rods?### Solution
```{python}def calulate_assignments(row_length, cuts, unit):
# Problem initialization
assignments = []
wastage = 0
row_id = 1
residual = row_length
#Sort the cut lengths in descending order
cuts = sorted(cuts, reverse=True)while cuts != []:
for cutting_id, cutting in enumerate(cuts):
go_to_next_row=True
# When a cut is valid do assignment!
if cutting <= residual:
cuts.pop(cutting_id)
residual = residual - cutting
assignments.append({'Rod id': row_id, 'Cut length':str(cutting) +' '+ unit})
go_to_next_row=False# Go to the next row!
if go_to_next_row or residual == 0:
row_id +=1
assignments.append('') # Trick for illustration purposes in print :-)
wastage = wastage + residual
residual = row_length
if cuts == []:
wastage = wastage + residual
print('*'*60)
print('RESULTS')
print('*'*60)
print('-'*10 + 'Assignments' + '-'*10)
for assignment in assignments:
print(assignment)
print('-'*9 + 'Number of Rodes' + '-'*9)
print(row_id)
print('-'*12 + 'Wastage' + '-'*12)
print(wastage, unit)
print('*'*60)```
### Example
```
row_length = 10
cuttting_list = [10,1,7,9,3,1,1,8]calulate_assignments(row_length=row_length,
cuts=cuttting_list,
unit='m'
)
```**Results**
***************************************
RESULTS
***************************************----------Assignments----------
{'Rod id': 1, 'Cut length': '10 m'}
{'Rod id': 2, 'Cut length': '9 m'}
{'Rob id': 2, 'Cut length': '1 m'}{'Rod id': 3, 'Cut length': '8 m'}
{'Rod id': 3, 'Cut length': '1 m'}
{'Rod id': 3, 'Cut length': '1 m'}{'Rod id': 4, 'Cut length': '7 m'}
{'Rod id': 4, 'Cut length': '3 m'}---------Number of Rodes---------
5
------------Wastage------------
10 m
***************************************