Question

I've been working on the Knapsack problem implementation, but I could not implement it right the code just keeps going into this infinite loop of while(true)
here's the code:

class KSBB:
    global x
    global y
    x=[]
    y=[]
    global sp
    sp=0
    global cw
    global cp
    global nw
    global np
    cw,cp,nw,np=0,0,0,0
    global k
    k=0
    global pi
    pi=0
def __init__(self,a,b,c):
    self.weights=a
    self.values=b
    self.c=c
    x=len(self.weights)
    y=len(self.weights)

Bound method:

def bound(self):
    global cp
    found=False
    bv=0
    n=len(self.weights)
    np=cp
    nw=cw
    pi=k
    while(pi < n and ~found):
        if(nw+self.weights[pi] <= self.c):
            nw+=self.weights[pi]
            np+=self.values[pi]
            y.append(1)
        else:
            bv=np+((self.c-nw)*(self.values[pi]/self.weights[pi]))
            found=True
            #y.append(0)
        pi+=1
    if found:
        pi-=1
        return bv
    else:
        return np

Branching Method:

def Knapsack(self):
    n=len(self.weights)
    while True:
        global sp
        while (self.bound() <= sp):
            while(k !=0 and y[k] !=1):
                k-=1 
            if (K==0):return
            y[k]=0
            cw-=self.weights[k]
            cp-=self.values[k]
        cw=nw
        cp=np
        k=pi
        print k
        if (k==n):              
            sp=cp
            x=y
            k=n-1
        else:
            y[k]=0

Output Method:

def output(self):return sp
Was it helpful?

Solution

if (K==0)

should probably be

if (k==0)

Just a typo...

It is easy to localize this problem - you know where you want to terminate your loop and the only thing which can go wrong is your if statement. Spotting such things is easy and one of the most basic things to master in programming. You need to learn debugging as soon as your programs start to be longer than 5 lines.

OTHER TIPS

~found is a bitwise complement. I think you mean not found!

>>> ~False
-1             # True
>>> ~True
-2             # also True!
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top