-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathKnapSack.py
40 lines (32 loc) · 1.05 KB
/
KnapSack.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import math
class Knapsack(object):
def __init__(self,weights,values,maxWeight):
self.weights = weights
self.values = values
self.maxWeight = maxWeight
def getProblemSize(self):
return len(self.values)
def sumWeights(self,indiviual):
w = 0
for i in range(len(indiviual)):
if indiviual[i]==1:
w += self.weights[i]
return w
def sumValues(self,indiviual):
v = 0
for i in range(len(indiviual)):
if indiviual[i]==1:
v += self.values[i]
return v
def fitness(self,indiviual):
'''Very simple fitness function'''
sumWeights = self.sumWeights(indiviual)
penalty = 1
if sumWeights>self.maxWeight:
penalty = sumWeights+math.fabs(self.maxWeight-sumWeights)
fitness = (self.sumValues(indiviual))-(penalty)
return fitness
def getValues(self):
return self.values
def getWeights(self):
return self.weights