Skip to content

Commit 43b2d52

Browse files
committed
Homework_6 figures + README
1 parent 7f45248 commit 43b2d52

File tree

5 files changed

+24
-23
lines changed

5 files changed

+24
-23
lines changed
File renamed without changes.
File renamed without changes.

Homework_6/homework.pdf

31.7 KB
Binary file not shown.

Homework_6/homework.tex

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,11 @@
5959
\subsection*{1. Define the 0-1 knapsack problem.}
6060
6161
Το knapsack problem είναι κλασσικό πρόβλημα βελτιστοποίησης. Υπάρχουν διαθέσιμα αντκείμενα, που το καθένα έχει συγκεκριμένη αξία και βάρος και διαθέσιμα σακίδια (ή ένα σακίδιο) και στόχος είναι να τοποθετηθούν τα αντικείμενα στο σακίδιο με τέτοιον τρόπο, ώστε να μεγιστοποιηθεί η συνολική αξία των αντικειμένων, χωρίς να παραβιαζεται η χωρητικότητα του σακιδίου. \\ \\
62-
62+
6363
Έχει διάφορες παραλλαγές ως πρόβλημα, που σχετίζονται με την κατανομή των αντικειμένων και των σακιδίων. Σε κάποια είδη προβλημάτων σακιδίου τα αντικείμενα μπορούν να χρησιμοποιηθούν μόνο μία φορά το καθένα, ενώ σε κάποια άλλα υπάρχει μια περιορισμένη ποσότητα από κάθε αντικείμενο. Επίσης, υπάρχει η δυνατότητα σε κάποια είδη προβλημάτων να επιλέξουμε κλάσματα αντικειμένων, ενώ σε άλλα είμαστε υποχρεωμένοι αν επιλέξουμε ένα αντικείμενο να το τοποθετήσουμε ολόκληρο στο σακίδιο. Τέλος, υπάρχει η παραλλαγή την πολλαπλής επιλογή του ίδιου αντικειμένου και η παραλλαγή που απαγορεύεται αυστηρώς να επιλέξουμε το ίδιο αντικείμενο δεύτερη φορά. \\ \\
6464
6565
Μπορούμε να συνοψίσουμε τα είδη των knapsack προβλημάτων ως προς τη δυνατότητα επιλογής αντικειμένων ως εξής: \\
66-
\(\bullet\) \(\textbf{ακέραιο πρόβλημα σακιδίου}\) : \\
66+
\(\bullet\) \(\textbf{ακέραιο πρόβλημα σακιδίου}\) : \\
6767
Μπορόυμε να επιλέξουμε το κάθε αντικείμενο είτε αυτόυσιο, είτε να μην το πάρουμε καθόλου. Δε μπορούμε να πάρουμε κλάσμα του αντικειμένου. \\
6868
\(\bullet\) \(\textbf{κλασματικό πρόβλημα σακιδίου}\): \\
6969
Δεν είμαστε υποχρεωμένοι να επιλέξουμε τα αντικείμενα "διαζευκτικά". Μπορούμε να πάρουμε κλάσμα των αντικειμένων. \\
@@ -81,7 +81,7 @@ \subsection*{1. Define the 0-1 knapsack problem.}
8181
8282
\begin{figure}
8383
\centering
84-
\includegraphics[scale=0.7]{./knapsack_problem.png}
84+
\includegraphics[scale=0.7]{./figures/knapsack_problem.png}
8585
\caption{Ποιά είναι η καλύτερη επιλογή αντικειμένων;}
8686
\end{figure}
8787
@@ -101,17 +101,17 @@ \subsection*{1. Define the 0-1 knapsack problem.}
101101
102102
\begin{align*}
103103
\max \sum_{j=1}^{n}{p_{j}x_{j}}
104-
\end{align*}
104+
\end{align*}
105105
υπό τον περιορισμό:
106106
107107
\begin{align*}
108108
\sum_{j=1}^{n}{w_{j}x_{j}} \leq C
109109
\end{align*}
110110
111111
όπου \(x_{j}\) είναι μία δυαδική μεταβλητή που δηλώνει αν έχουμε τοποθετήσει το \(j\)-οστό αντικείμενο στο σακίδιο.
112-
113-
\[ x_{j} =
114-
\begin{cases}
112+
113+
\[ x_{j} =
114+
\begin{cases}
115115
1 & \text{αν το j-οστό αντικείμενο τοποθετηθεί στο σακίδιο} \\
116116
0 & \text{αν το j-οστό αντικείμενο ΔΕΝ τοποθετηθεί στο σακίδιο}
117117
\end{cases}
@@ -124,7 +124,7 @@ \subsection*{1. Define the 0-1 knapsack problem.}
124124
w_{j} \geq 0 \\
125125
C \geq 0 \\
126126
w_{j} \leq c \\
127-
\sum_{j=1}^{n} w_{j} \geq C
127+
\sum_{j=1}^{n} w_{j} \geq C
128128
\end{align*}
129129
130130
\vspace{2in}
@@ -146,7 +146,7 @@ \subsection*{2. Give a dynamic programming solution to the 0-1 knapsack problem.
146146
έως το n και σε κάθε υποπρόβλημα m, υπολογίζεται η τιμή \(f_{m}(c)\) καθώς το
147147
c μεγαλώνει από το 0 έως το C. \\ \\
148148
149-
Η βέλτιστη λύση για αυτό το στιγμιότυπο είναι:
149+
Η βέλτιστη λύση για αυτό το στιγμιότυπο είναι:
150150
\begin{align*}
151151
f_{m}(c) = \max {\sum_{j=1}^{m}{p_{j}x_{j}}} \text{ όπου } \\
152152
\sum_{j=1}^{m}{w_{j}x_{j}} \leq c \\
@@ -155,8 +155,8 @@ \subsection*{2. Give a dynamic programming solution to the 0-1 knapsack problem.
155155
156156
και ισχύει ότι
157157
158-
\[ f_{m}(c) =
159-
\begin{cases}
158+
\[ f_{m}(c) =
159+
\begin{cases}
160160
f_{m-1}(c) & \text{ για } c = 0,...,w_{m}-1 \\
161161
\max \left( f_{m-1}(c), f_{m-1}(c-w_{m}) + p_{j} \right) & \text{ για } c = w_{m},...,C
162162
\end{cases}
@@ -167,7 +167,7 @@ \subsection*{2. Give a dynamic programming solution to the 0-1 knapsack problem.
167167
\(\textbf{Βήμα 1:}\) \\
168168
Κατασκευάζουμε έναν πίνακα \((n+1) \times (c+1)\). Η γραμμή j υποδηλώνει ότι έχουμε στη διάθεσή μας μόνο αντικείμενα 1,...,j. Η στήλη i υποδηλώνει ότι έχουμε χωρητικότητα σακιδίου i. Συνεπώς, αν ονομάζουμε τον πίνακα Κ, τότε το Κ[j][i] στοιχείο του πίνακα είναι η μεγαλύτερη "αξία" που μπορούμε να αποκομίσουμε από τα αντικείμενα 1,...,j με σακίδιο χωρητικότητας i. \\
169169
\(\textbf{Βήμα 2:}\) \\
170-
Τοποθετούμε τις αρχικές τιμές στον πίνακα, που δε χρειάζονται ιδιαίτερη υπολογιστική διαδικασία. Τα κελιά του πίνακα που μπορούμε να συμπληρώσουμε αμέσως είναι η γραμμή 0, όπου αν δεν έχουμε κανένα αντικείμενο, θα έχουμε 0 τελική αξία και η στήλη 0, όπου αν το σακίδιο έχει μηδενική χωρητικότητα δε μπορούμε να αποθηκεύσουμε κανένα αντικείμενο. \\
170+
Τοποθετούμε τις αρχικές τιμές στον πίνακα, που δε χρειάζονται ιδιαίτερη υπολογιστική διαδικασία. Τα κελιά του πίνακα που μπορούμε να συμπληρώσουμε αμέσως είναι η γραμμή 0, όπου αν δεν έχουμε κανένα αντικείμενο, θα έχουμε 0 τελική αξία και η στήλη 0, όπου αν το σακίδιο έχει μηδενική χωρητικότητα δε μπορούμε να αποθηκεύσουμε κανένα αντικείμενο. \\
171171
\(\textbf{Βήμα 3:}\) \\
172172
Υπολογίζουμε την τιμή για το κελι Κ[j][i], λαμβάνοντας υπόψη τα προηγούμενα κελιά. Υπάρχουν δύο εκδοχές, είτε να τοποθετήσουμε το αντικείμενο j στο σακίδιο, είτε όχι. Αν δεν τοποθετήσουμε το αντικείμενο στο σακίδιο, τότε η μέγιστη τιμή που μπορούμε να λάβουμε στη συγκεκριμένη περίπτωση βρίσκεται στο Κ[j-1][i]. Αν επιλέξουμε να τοποθετήσουμε το αντικείμενο στο σακίδιο (αυτό σημαίνει ότι τα βάρος του είναι κατάλληλο σε σχέση με τη χωρητικότητα που έχει τη δεδομένη στιγμή το σακίδιο), τότε το κελί Κ[j][i] είναι ίσο με την αξία του αντικειμένου j συν τη μέγιστη αξία που έχει προκύψει από τα προηγούμενα αντικείμενα, που χωρούν να μπούν στο σακίδιο μετά την καταχώρηση του j-οστού αντικειμένου στο σακίδιο. Συμπληρώνουμε όλον τον πίνακα. (Σημείωση: θέλουμε να χρησιμοποιήσουμε όλη τη χωρητικότητα του σακιδίου ή έστω να κάνουμε όσο καλύτερη δυνατή εκμετάλλευση του χώρου του). \\
173173
\(\textbf{Βήμα 4:}\) \\
@@ -186,7 +186,7 @@ \subsection*{3. Give real world applications of knapsack problem.}
186186
187187
\(\bullet\) Η αποθήκευση εμπορευμάτων σε αποθήκες. Ο χώρος της αποθήκης είναι καθορισμένος και δεν μεταβάλλεται και πρέπει σε αυτόν το χώρο να μπορέσουν να χωρέσουν όσο το δυνατό περισσότερα εμπορεύματα. Απλουστεύοντας τα δεδομένα, μπορόυμε να υποθέσουμε ότι περισσότερα προϊόντα στην αποθήκη, σημαίνει αύξηση των κερδών της επιχείρησης. \\
188188
189-
\(\bullet\) Οι κατάλληλες επενδύσεις. Έστω ότι επιθυμούμε να επενδύσουμε όλα ή ένα μέρος από τα κεφάλαια. Έχουμε να επιλέξουμε ανάμεσα σε κάποιες πιθανές επενδύσεις. Κάθε επένδυση έχει ένα συγκεκριμένο κόστος και ένα αναμενόμενο κέρδος. Η βέλτιστη επιλογή μπορεί να βρεθεί με το πρόβλημα του σακιδίου. \\
189+
\(\bullet\) Οι κατάλληλες επενδύσεις. Έστω ότι επιθυμούμε να επενδύσουμε όλα ή ένα μέρος από τα κεφάλαια. Έχουμε να επιλέξουμε ανάμεσα σε κάποιες πιθανές επενδύσεις. Κάθε επένδυση έχει ένα συγκεκριμένο κόστος και ένα αναμενόμενο κέρδος. Η βέλτιστη επιλογή μπορεί να βρεθεί με το πρόβλημα του σακιδίου. \\
190190
191191
\(\bullet\) Η επιλογή υπαλλήλων για μία επιχείρηση. Υπάρχουν πολλοί εν δυνάμει υπάλληλοι, με διαφορετικές ικανότητες, ταλέντα, γνώσεις, πτυχία και πιστοποιήσεις, αλλά ταυτόχρονα και με διαφορετικές μισθολογικές απαιτήσεις. Η επιχείρηση είναι σε θέση να διαθέτει ένας συγκεκριμένο ποσό για μισθοδοσίες και μπορεί να παρέχει καθορισμένες παροχές στους εργαζομένους της (π.χ. κτηριακές υποδομές). Ποιά είναι η καλύτερη επιλογή εργαζομένων, ώστε η επιχείρηση να αυξήσει τα κέρδη της; \\
192192
@@ -196,7 +196,7 @@ \subsection*{3. Give real world applications of knapsack problem.}
196196
197197
\begin{figure}[!]
198198
\centering
199-
\includegraphics[scale=0.65]{./knapsack-example.png}
199+
\includegraphics[scale=0.65]{./figures/knapsack-example.png}
200200
\caption{Μόνο με χιουμοριστική διάθεση..}
201201
\end{figure}
202202
@@ -212,24 +212,24 @@ \subsection*{4. Define the Subset sum problem and give a dynamic programming sol
212212
213213
Το Subset sum problem ή αλλιώς Value Independent Knapsack Problem ή Stickstacking Problem μπορεί να θεωρηθεί στιγμιότυπο του 0-1 Knapsack problem. Πρέπει να επιλέξουμε ένα υποσύνολο βαρών, τέτοιο ώστε το άθροισμά τους να είναι το μεγαλύτερο δυνατό και ταυτόχρονα να μην υπερβαίνει τη χωρητικότητα του σακιδίου. \\ \\
214214
215-
Έστω ότι έχουμε n αντικείμενα συνολικά και ένα σακίδιο χωρητικότητας C. Κάθε αντικείμενο j έχει βάρος \(w_{j}\). Στόχος είναι να επιλεγεί ένα υποσύνολο αντικειμένων τέτοιο ώστε το συνολικό βάρος τους να είναι ίσο ή να μη ξεπερνά τη χωρητικότητα του σακιδίου. \\ \\
215+
Έστω ότι έχουμε n αντικείμενα συνολικά και ένα σακίδιο χωρητικότητας C. Κάθε αντικείμενο j έχει βάρος \(w_{j}\). Στόχος είναι να επιλεγεί ένα υποσύνολο αντικειμένων τέτοιο ώστε το συνολικό βάρος τους να είναι ίσο ή να μη ξεπερνά τη χωρητικότητα του σακιδίου. \\ \\
216216
217217
Η μαθηματική μοντελοποίηση όσων αναφέραμε είναι: \\
218218
219219
\begin{align*}
220220
\max \sum_{j=1}^{n}{w_{j}x_{j}}
221-
\end{align*}
221+
\end{align*}
222222
223223
υπό τον περιορισμό:
224224
225225
\begin{align*}
226226
\sum_{j=1}^{n}{w_{j}x_{j}} \leq C
227227
\end{align*}
228228
229-
με
229+
με
230230
231-
\[ x_{j} =
232-
\begin{cases}
231+
\[ x_{j} =
232+
\begin{cases}
233233
1 & \text{αν το j-οστό αντικείμενο τοποθετηθεί στο σακίδιο} \\
234234
0 & \text{αν το j-οστό αντικείμενο ΔΕΝ τοποθετηθεί στο σακίδιο}
235235
\end{cases}
@@ -241,7 +241,7 @@ \subsection*{4. Define the Subset sum problem and give a dynamic programming sol
241241
w_{j} \geq 0 \\
242242
C \geq 0 \\
243243
w_{j} \leq c \\
244-
\sum_{j=1}^{n} w_{j} \geq C
244+
\sum_{j=1}^{n} w_{j} \geq C
245245
\end{align*}
246246
247247
Ουσιαστικά, το Subset sum problem είναι ειδική περίπτωση του 0-1 Knapsack problem. Το 0-1 Knapsack problem γίνεται Subset sum problem αν η "αξία" στην περίπτωση του 0-1 Knapsack problem είναι ταυτόσημη με το βάρος του του j-οστού αντικειμένου, \(p_{j} = w_{j}, \forall j\). \\ \\
@@ -251,9 +251,9 @@ \subsection*{4. Define the Subset sum problem and give a dynamic programming sol
251251
\(\textbf{Βήμα 1:}\) \\
252252
Κατασκευάζουμε έναν πίνακα \((n+1) \times (c+1)\), στον οποίο καταχωρίζουμε true ή false. Η γραμμή j υποδηλώνει ότι έχουμε στη διάθεσή μας μόνο τους αριθμούς 1,...,j. Η στήλη i υποδηλώνει ότι θέλουμε να επιτύχουμε άθροισμα i. Συνεπώς, αν ονομάζουμε τον πίνακα Κ, τότε το Κ[j][i] στοιχείο του πίνακα δηλώνει αν μπορούμε ή όχι να επιτύχουμε άθροισμα ίσο με i, με διαθέσιμους προσθεταίoυς τους αριθμους 1,...,j. \\
253253
\(\textbf{Βήμα 2:}\) \\
254-
Τοποθετούμε τις αρχικές τιμές στον πίνακα, που δε χρειάζονται ιδιαίτερη υπολογιστική διαδικασία. Τα κελιά του πίνακα που μπορούμε να συμπληρώσουμε αμέσως είναι εκείνα της γραμμής 0,με false, καθώς αν δεν έχουμε κανέναν διαθέσιμο αριθμό, δε μπορούμε να επιτύχουμε άθροισμα και της στήλης 0, με true, αφού το άθροισμα του κενού υποσυνόλου είναι 0. \\
254+
Τοποθετούμε τις αρχικές τιμές στον πίνακα, που δε χρειάζονται ιδιαίτερη υπολογιστική διαδικασία. Τα κελιά του πίνακα που μπορούμε να συμπληρώσουμε αμέσως είναι εκείνα της γραμμής 0,με false, καθώς αν δεν έχουμε κανέναν διαθέσιμο αριθμό, δε μπορούμε να επιτύχουμε άθροισμα και της στήλης 0, με true, αφού το άθροισμα του κενού υποσυνόλου είναι 0. \\
255255
\(\textbf{Βήμα 3:}\) \\
256-
Υπολογίζουμε την τιμή για το κελι Κ[j][i], λαμβάνοντας υπόψη τα προηγούμενα κελιά. Υπάρχουν δύο εκδοχές, είτε να τοποθετήσουμε στο υποσύνολο των προσθεταίων τον αριθμό j, είτε όχι. Αν υπάρχει υποσύνολο ακεραίων από το 1 ως το j-1, τέτοιο ώστε \(\sum_{k=1}^{j-1}k = i\), τότε στο κελί Κ[j][i] τοποθετούμε true, αλλιώς τοποθετούμε false. \\
256+
Υπολογίζουμε την τιμή για το κελι Κ[j][i], λαμβάνοντας υπόψη τα προηγούμενα κελιά. Υπάρχουν δύο εκδοχές, είτε να τοποθετήσουμε στο υποσύνολο των προσθεταίων τον αριθμό j, είτε όχι. Αν υπάρχει υποσύνολο ακεραίων από το 1 ως το j-1, τέτοιο ώστε \(\sum_{k=1}^{j-1}k = i\), τότε στο κελί Κ[j][i] τοποθετούμε true, αλλιώς τοποθετούμε false. \\
257257
\(\textbf{Βήμα 4:}\) \\
258258
Η τελική απάντηση στο Subset sum problem βρίσκεται στη θέση Κ[n+1][c+1].
259259
@@ -269,7 +269,7 @@ \subsection*{References:}
269269
270270
3. "How to solve the Knapsack Problem with dynamic programming", https://medium.com/@fabianterh/how-to-solve-the-knapsack-problem-with-dynamic-programming-eb88c706d3cf \\ \\
271271
272-
4. "Subset sum problem", https://en.wikipedia.org/wiki/Subset\_sum\_problem \\ \\
272+
4. "Subset sum problem", https://en.wikipedia.org/wiki/Subset\_sum\_problem \\ \\
273273
274274
5. "Subset Sum Problem using Dynamic Programming (O(N*sum) time complexity)", https://iq.opengenus.org/subset-sum-problem-dynamic-programming/ \\ \\
275275

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
* [Homework 3](Homework_3/homework.pdf)
1111
* [Homework 4](Homework_4/homework.pdf)
1212
* [Homework 5](Homework_5/homework.pdf)
13+
* [Homework 6](Homework_6/homework.pdf)
1314

1415
## Presentation Topic
1516

0 commit comments

Comments
 (0)