Beispiel #1
0
approx = float(approx)

if t == 'time':
    counter = [[0 for x in range(100)] for y in range(10)]
    averages = []
    fptasSum, dynSum, j = 0, 0, 0
    for n in range(minsize, 10*step + minsize, step):
        for i in range(100):
            filename = "tests/{0}_{3}_time_s{1}_i{2}".format(prefix, str(step), str(i), str(approx))
            generateInstance(filename, int(n), int(n)*randint(1,n))
            n, c, w = readInstance(filename)
            begin = time()
            fptasResult, _ = FPTAS(n, c, w, approx)
            fptasTime = time() - begin
            begin = time()
            dynResult, _ = knapsack(n, c, w)
            dynTime = time() - begin
            # counter[j][i] = [dynResult, fptasResult, dynTime, fptasTime]
            fptasSum += fptasTime
            dynSum += dynTime
        averages.append([n, dynSum/100.0, fptasSum/100.0, abs(dynSum-fptasSum)/float(dynSum)*100])
        j += 1
        fptasSum, dynSum = 0, 0
    filename = "results/res_{0}_{1}_{3}_t_{2}".format(prefix, str(step), str(approx), str(minsize))
    with open(filename, 'w') as f:
        for n in averages:
            print n
            f.write(str(n)[1:-1]+"\n")

elif t == 'quality':
    res = []
Beispiel #2
0
def FPTAS(n, cap, wc, sf):
    nCap = int(float(cap)*sf)
    nWC = [(round(float(weight)* sf) + 1, cost) for weight, cost in wc]
    #print "APPROXIMATED: ", nCap, nWC
    #print
    return knapsack(n, nCap, nWC)
Beispiel #3
0
            x, y = line.split()
            wc.append((int(x), int(y)))
        return n, cap, wc

def generateInstance(filename, n, cap):
    with open(filename, 'w') as f:
        f.write(str(n) + '\n')
        f.write(str(cap) + '\n')
        for i in range(int(n)):
            w, c = randint(0, int(cap)), randint(0, 100)
            f.write(str(w) + ' ' + str(c) + '\n')

if __name__ == '__main__':
    if len(sys.argv) < 3:
        print "Usage:\n"
        print "{0} approx filename".format(sys.argv[0])
        print "{0} -g filename n capacity".format(sys.argv[0])
        sys.exit()
    if sys.argv[1] == '-g':
        _, _, filename, n, cap = sys.argv
        generateInstance(filename, n, cap)
        sys.exit()

    approx = float(sys.argv[1])
    n, cap, wc = readInstance(sys.argv[2])
    print "INPUT: ", n, cap, wc
    print
    print FPTAS(n, cap, wc, approx)
    print
    print "DYNAMIC: ", knapsack(n, cap, wc)