Exemplo n.º 1
0
def solveIt(inputData):
    # Modify this code to run your optimization algorithm

    # parse the input
    lines = inputData.split('\n')

    firstLine = lines[0].split()
    items = int(firstLine[0])
    capacity = int(firstLine[1])

    values = []
    weights = []

    for i in range(1, items+1):
        line = lines[i]
        parts = line.split()

        values.append(int(parts[0]))
        weights.append(int(parts[1]))

    items = len(values)
    c=values
    A=[weights]
    b=[capacity]
    e=[-1]
    intIndices=range(1,items+1)
    lower=[0]*items
    upper=[1]*items
    # a trivial greedy algorithm for filling the knapsack
    # it takes items in-order until the knapsack is full
    value = 0
    weight = 0
    taken = []
    lp=lp_maker(c, A, b, e, lower, upper,intIndices)
    lpsolve('set_timeout',lp,100)
    lpsolve('solve', lp)
    obj=lpsolve('get_objective', lp)
    x=lpsolve('get_variables', lp)[0]
    lpsolve('delete_lp', lp)
    # [obj, x, duals] = lp_solve(c, A, b, e, lower, upper,intIndices)
    # for i in range(0, items):
    #     if weight + weights[i] <= capacity:
    #         taken.append(1)
    #         value += values[i]
    #         weight += weights[i]
    #     else:
    #         taken.append(0)
    value=obj
    taken=x
    # prepare the solution in the specified output format
    outputData = str(int(value)) + ' ' + str(0) + '\n'
    outputData += ' '.join(map(lambda x:str(int(x)), taken))
    return outputData
Exemplo n.º 2
0
 def solve(self,xlist,X,rX):
     #print xlist
     if len(xlist) == 1:
         if rX[0] > 0:
             X[abs(rX[0])-1] = 1
         elif rX[0] < 0:
             X[abs(rX[0])-1] = 0
         rlist = [1]
         return numpy.array(rlist)
     tlist = [numpy.abs(xlist).tolist()]
     r1 = numpy.sum(numpy.extract(numpy.greater(xlist,0), xlist))
     r2 = numpy.sum(numpy.extract(numpy.less(xlist,0), xlist))
     r = 1#r1 + abs(r2) - 1
     tlistr = [1]#[r]
     eqlist = [1]#[0]
     for i in xrange(len(xlist)):
         sX = numpy.zeros(len(xlist),numpy.int)
         sX[i] = 1
         tlist.append(sX.tolist())
         tlistr.append(1)
         eqlist.append(-1)
     for i in xrange(len(xlist)):
         sX = numpy.zeros(len(xlist),numpy.int)
         sX[i] = 1
         tlist.append(sX.tolist())
         tlistr.append(0)
         eqlist.append(1)
     for i in xrange(len(rX)):
         sX = numpy.zeros(len(xlist),numpy.int)
         if X[abs(rX[i])-1] != -1:
             sX[i] = 1
             tlist.append(sX.tolist())
             tlistr.append(X[abs(rX[i])-1])
             eqlist.append(0)
     lp = lp_maker(xlist.tolist(), tlist, tlistr, eqlist, None, None)
     lpsolve('solve', lp)
     rlist = lpsolve('get_variables', lp)[0]
     lpsolve('delete_lp', lp)
     return numpy.array(rlist)
Exemplo n.º 3
0
from lp_maker import *
f = [143, 60]
A = [[120, 210], [110, 30], [1, 1]]
b = [15000, 4000, 75]
lp = lp_maker(f, A, b, [-1, -1, -1], None, None, None, 1, 0)
solvestat = lpsolve('solve', lp)
obj = lpsolve('get_objective', lp)
print obj
x = lpsolve('get_variables', lp)[0]
print x
lpsolve('delete_lp', lp)
Exemplo n.º 4
0
def execute_lp(speeds, search_speeds, depots, colors, C, Csp, pts):

    # speeds -> list of robots speeds
    # depots -> list of robots depots points in the "local" indexation
    # colors -> list of color types in char representation ('b', 'r', 'g', ...)
    # C -> distance cost matrix
    # pts -> list of nodes positions
    # PolC -> polinomial coefficients for the virtual graph (ONLY TO PLOT THE RESULT)
    # set_uv -> list of active edges (ONLY TO PLOT THE RESULT)

    n = len(C)  #number of nodes
    m = n * (n - 1)  #number of edges
    R = len(speeds)  #number of robots
    """
    print "\n\n-------------------------------------\n-------------------------------------"
    print "Here is speeds: ", speeds
    print "Here is search_speeds: ", search_speeds
    print "Here is depots: ", depots
    print "Here is colors:", colors
    print "C: ", C
    print "C_sp: ", C_sp
    print "pts: ", pts
    print "-------------------------------------\n-------------------------------------\n\n"
    """

    w_s = [0, 12, 0, 12]
    #Definition of the edges
    E = [[0 for i in range(2)] for j in range(m)]
    k = 0
    for i in range(n):
        for j in range(n):
            if (i != j):
                E[k][0] = i
                E[k][1] = j
                k = k + 1
    """
    print '\nE = '
    for k in range(m):
        print E[k][:]
    #"""
    # ----------  ----------  ----------

    #Definition of the cost matrix
    #C = np.matrix(C)
    #Csp = np.matrix(Csp)
    C_l = []
    Csp_l = []
    for r in range(R):
        #exec('C_%d = C/float(speeds[r]) + C_sp*(2*pi/float(search_speeds[r]))' % (r))
        #exec('C_%d = C_%d.tolist()' % (r,r))
        C_l.append(C)
        Csp_l.append(C)
        for i in range(len(C)):
            for j in range(len(C[0])):
                C_l[r][i][j] = C[i][j] / float(speeds[r])
                Csp_l[r][i][j] = Csp[i][j] / float(search_speeds[r])
    #C = C.tolist()
    #C_sp = C_sp.tolist()
    """
    for r in range(R):
        print ''
        exec("print 'C_%d = '" % r)
        for k in range(n):
            exec ("print C_%d[k][:]" % r)
    """
    #  ----------  ----------  ----------

    #Addition of the heuristic cost based on EUCLIDIAN DISTANCE
    #"""
    #C_check0 = [0 for i in range(len(C))]
    #C_check1 = [0 for i in range(len(C))]
    for r in range(R):
        #exec ('C_%d = np.matrix(C_%d)' % (r, r))
        for i in range(n):
            for j in range(n):
                gamma = 1
                heuristica_i = C_l[r][depots[r]][i]
                heuristica_j = C_l[r][depots[r]][j]
                #heuristica = (heuristica_i + heuristica_j) / 2.0
                heuristica = min([heuristica_i, heuristica_j])
                #exec ('C_%d[i,j] = C_%d[i,j] + gamma*heuristica' % (r, r))
                C_l[r][i][j] = C_l[r][i][j] + gamma * heuristica
            """
            #Only to plot (after) the values of the heuristic costs - CAN BE REMOVED
            if r == 0:
                C_check0[i] = gamma*heuristica
            if r == 1:
                C_check1[i] = gamma*heuristica
            """

        #exec ('C_%d = C_%d.tolist()' % (r, r))
    #"""
    """
    for r in range(R):
        print ''
        exec("print 'C_%d = '" % r)
        for k in range(n):
            exec ("print C_%d[k][:]" % r)
    """
    #  ----------  ----------  ----------

    #Definition of the x variables bounds
    vlb = []
    vub = []
    #Bouds of "X" variables
    for i in range(R * m):
        vlb.append(0)
        vub.append(1)
    # Bouds of "F" variable
    vlb.append(0 * n)
    vub.append(1000 * n)  #big positive number
    # ----------  ----------  ----------

    #Definition of the cost vector
    c = []
    #Cost of "x" variables
    for k in range(R * m):
        c.append(0)
    # Cost of "F" variable
    c.append(1)
    """
    #Cost of "x" variables
    for r in range(R):
        for i in range(n):
            for j in range(n):
                if (i != j):
                    #c.append(C[i][j] / speeds[r])
                    exec('c.append(C_%d[%d][%d])' % (r,i,j))
    #Cost of the "F" variable
    c.append(0)
    """
    # ----------  ----------  ----------

    # "Arival constraints" ----------  ----------  ----------
    Aeq1 = [[0 for i in range(R * m)] for j in range(n - len(set(depots)))]
    count_line = -1
    for j in range(n):  # 0 until n-1
        if (not j in depots):  # if j belongs to V^
            count_line = count_line + 1
            for r in range(R):
                for k in range(m):  # 0 until m-1
                    if (E[k][1] == j):
                        Aeq1[count_line][r * m + k] = 1
    beq1 = [1 for i in range(n - len(set(depots)))]
    """
    print '\nAeq1 (',len(Aeq1),'x',len(Aeq1[0]),') = '
    #print np.matrix(Aeq1)
    for k in range(len(Aeq1)):
        print Aeq1[k][:]
    print '\nbeq1 = ', beq1
    """
    #----------  ----------  ----------  ----------  ----------  ----------

    #"Flux conservation constraints" ----------  ----------  ----------
    Aeq2 = [[0 for i in range(R * m)] for j in range(R * n)]
    for r in range(R):
        for p in range(n):  # 0 until n-1
            for k in range(0, m):  # 0 until m-1
                if (E[k][1] == p):
                    Aeq2[r * n + p][r * m + k] = 1
                if (E[k][0] == p):
                    Aeq2[r * n + p][r * m + k] = -1
    beq2 = [0 for i in range(R * n)]
    """
    print '\nAeq2 (',len(Aeq2),'x',len(Aeq2[0]),') = '
    for k in range(len(Aeq2)):
        print Aeq2[k][:]
    print '\nbeq2 = ', beq2
    """
    #----------  ----------  ----------  ----------  ----------  ----------

    #"Depot constraints" ----------  ----------  ----------
    Aeq3 = [[0 for i in range(R * m)] for j in range(R)]
    for r in range(R):
        for k in range(0, m):  # 0 until m-1
            if (E[k][1] == depots[r]):  #???? is depot right???? yes
                Aeq3[r][r * m + k] = 1
    beq3 = [1 for i in range(R)]
    """
    print '\nAeq3 (',len(Aeq3),'x',len(Aeq3[0]),') = '
    for k in range(len(Aeq3)):
        print Aeq3[k][:]
    print '\nbeq3 = ', beq3
    """
    #----------  ----------  ----------  ----------  ----------  ----------

    #Joining all equality constraints ----------  ----------  ----------
    Aeq = []
    Aeq = Aeq + Aeq1 + Aeq2 + Aeq3
    beq = []
    beq = beq + beq1 + beq2 + beq3
    #Adding 'F' variable
    for k in range(len(Aeq)):
        Aeq[k].append(0)
    """
    print '\nAeq (',len(Aeq),'x',len(Aeq[0]),') = '
    for k in range(len(Aeq)):
        print Aeq[k][:]
    print '\nsize of Aeq:', len(Aeq),'x',len(Aeq[0])
    print '\nbeq = ', beq
    """
    #----------  ----------  ----------  ----------  ----------  ----------

    #MinMax constraints ----------  ----------  ----------
    AF = []
    bF = []
    AF = [[0 for i in range(R * m)] for j in range(R)]
    for r in range(R):
        k = -1
        for i in range(n):
            for j in range(n):
                if (i != j):
                    k = k + 1
                    #AF[r][k+r*m] = C[i][j]
                    #exec('AF[r][k+r*m] = C_%d[i][j]' % r)
                    AF[r][k + r * m] = C_l[r][i][j] + Csp_l[r][i][j]
    bF = [0 for i in range(R)]
    #Adding 'F' variable
    for k in range(len(AF)):
        AF[k].append(-1)
    """
    print '\nAF (',len(AF),'x',len(AF[0]),') = '
    for k in range(len(AF)):
        print AF[k][:]
    print '\nsize of AF:', len(AF),'x',len(AF[0])
    print '\nbF = ', bF
    """
    #----------  ----------  ----------  ----------  ----------  ----------

    #Joining all inequality constraints ----------  ----------  ----------
    Aineq = []
    for line in AF:
        Aineq.append(line)
    bineq = []
    for number in bF:
        bineq.append(number)
    """
    print '\nAineq (',len(Aineq),'x',len(Aineq[0]),') = '
    for k in range(len(Aineq)):
        print Aineq[k][:]
    print '\nsize of Aineq:', len(Aineq),'x',len(Aineq[0])
    print '\nbineq = ', bineq
    """
    #----------  ----------  ----------  ----------  ----------  ----------

    #Joining all constraints ----------  ----------  ----------
    A = []
    b = []
    #Equality constraints:
    for line in Aeq:
        A.append(line)
    for number in beq:
        b.append(number)
    #Subtour constraints:
    for line in Aineq:
        A.append(line)
    for number in bineq:
        b.append(number)
    #----------  ----------  ----------  ----------  ----------  ----------
    """
    print '\nA (',len(A),'x',len(A[0]),') = '
    for k in range(len(A)):
        print A[k][:]
    print '\nsize of A:', len(A),'x',len(A[0])
    print '\nb = ', b
    """

    # Definition of the type of constranis (> < =)
    e = []
    #Equality constraints (=)
    for k in range(len(Aeq)):
        e.append(0)
    # Inequality constraints (<)
    for k in range(len(Aineq)):
        e.append(-1)
    # ----------  ----------  ----------

    # Definition of the integer variables
    int_var = range(1, R * m + 1,
                    1)  #???? wouldnt it be range(0, R*m, 1)? No, this is write
    #int_var = []
    # ----------  ----------  ----------

    # Auto scale flag
    scalemode = 0
    # ----------  ----------  ----------

    # Definition of cost function operand (min or max)
    setminim = 1
    # ----------  ----------  ----------

    lp = lp_maker(c, A, b, e, vlb, vub, int_var, scalemode, setminim)

    if R == 2:
        TIMEOUT = 2.0 * 2  # seconds
    else:
        TIMEOUT = 3.0  # seconds
    TIMEOUT = 60.0
    lpsolve('set_timeout', lp, TIMEOUT)
    print '\n------------', 'Here is TIMEOUT', TIMEOUT, '------------\n'

    print '\nLP problem created'
    print 'Nodes:', n
    print 'Robots: ', R
    print 'Variables:', len(
        A[1]), '   (', len(A[1]) - 1, 'integers and', 1, 'real )'
    print 'Constraints:', len(A), '   (', len(Aeq), 'equalities and', len(
        Aineq), 'inequalities )'
    """
    print 'len(Aeq1):', len(Aeq1)
    print 'len(Aeq2):', len(Aeq2)
    print 'len(Aeq3):', len(Aeq3)
    print 'len(Aineq):', len(Aineq)
    """
    print ''

    print 'LP solution started ...'
    t = time.time()
    solvestat = lpsolve('solve', lp)
    elapsed = time.time() - t
    obj = lpsolve('get_objective', lp)
    x = lpsolve('get_variables', lp)[0]

    lpsolve('delete_lp', lp)

    print ''
    if (solvestat == 0):
        print '----- Optimal solution found -----'
        #print '\nX = ', x
        print '\nObjective = ', obj
        #Print chosen edges
        for r in range(R):
            chosen = []
            for k in range(m):
                if (abs(x[r * m + k] - 1) < 10**(-6)):
                    chosen.append(E[k])
            chosen = np.matrix(chosen)
            chosen = chosen.T
            print('\nChoosen edges for robot %d:' % (r + 1))
            print chosen + 1
        print ''
        for r in range(R):
            timeTask = 0
            k = -1
            for i in range(n):
                for j in range(n):
                    if (i != j):
                        k = k + 1
                        if (abs(x[r * m + k] - 1) < 10**(-6)):
                            #exec ('timeTask = timeTask + C_%d[i][j]' % r)
                            timeTask = timeTask + C_l[r][i][j]
            print('Time task for robot %d: ' %
                  (r + 1)), timeTask, '(not that correct)'
        #print "\n\n----------\n----------\nHere is complete x:\n",x,"----------\n----------\n\n"

    else:
        print '!!!!! Optimal solution NOT found !!!!!'
        print 'Return code', solvestat

    if (elapsed < 1):
        print '\nElapsed time: ', 1000 * elapsed, 'ms\n'
    else:
        print '\nElapsed time: ', elapsed, 's\n'

    #Plotting results  ----------  ----------  ----------
    """
    #ZZZpylab.axis('equal')
    #ZZZpylab.axis(w_s)
    pylab.axis('equal')
    pylab.axis(w_s)
    for k in range(n):
        #pylab.plot(pts[k][0], pts[k][1], 'bo', linewidth=2.0)
        #pylab.plot(pts[k][0], pts[k][1], 'b*', linewidth=2.0)
        #ZZZpylab.plot(pts[k][0], pts[k][1], 'ko', markersize=10.0)
        pylab.plot(pts[k][0], pts[k][1], 'ko', markersize=10.0)
        #pylab.text(pts[k][0]+0.04,pts[k][1]+0.04,k+1,fontsize=20.0)
        #ZZZpylab.text(pts[k][0] + 0.04, pts[k][1] + 0.04, k + 0, fontsize=20.0)
        z = 0

    for i in range(n):
        for j in range(n):
            if(i != j):
                #ZZZpylab.plot([pts[i][0],pts[j][0]], [pts[i][1],pts[j][1]],'k--',linewidth=0.2)
                pylab.plot([pts[i][0],pts[j][0]], [pts[i][1],pts[j][1]],'k--',linewidth=0.2)
                z = 0

    for r in range(R):
        k = -1
        for i in range(n):
            for j in range(n):
                if (i != j):
                    k = k + 1
                    if (abs(x[r * m + k] - 1) < 10 ** (-6)):
                        #ZZZpylab.plot([pts[i][0],pts[j][0]], [pts[i][1],pts[j][1]],colors[r],linewidth=3.0)
                        pylab.plot([pts[i][0],pts[j][0]], [pts[i][1],pts[j][1]],colors[r],linewidth=3.0)
                        z = 0
    """

    #write_results_to_file(**locals())

    #pylab.show()

    #return x, C_check0, C_check1
    return x
Exemplo n.º 5
0
from lpsolve55 import *
from lp_maker import *
f = [110*1.3, 30*2.0, 125*1.56, 75*1.8, 95*.95, 100*2.25, 50*1.35]
A = [[120, 210, 150.75, 115, 186, 140, 85], [110, 30, 125, 75, 95, 100, 50], [1, 1, 1, 1, 1, 1, 1], [1, -1, 0, 0, 0, 0, 0], [0, 0, 1, 0, -2, 0, 0], [0, 0, 0, -1, 0, -1, 1]]
b = [55000, 40000, 400, 0, 0, 0]
lp = lp_maker(f, A, b, [-1, -1, -1, -1, -1, -1], [10, 10, 10, 10, 20, 20, 20], [100, Infinite, 50, Infinite, Infinite, 250, Infinite], None, 1, 0)
solvestat = lpsolve('solve', lp)
obj = lpsolve('get_objective', lp)
print obj
x = lpsolve('get_variables', lp)[0]
print x
lpsolve('delete_lp', lp)
Exemplo n.º 6
0
    def formulate_lp(self):
        """ Formulates an ILP problem based on given cands and constrs. """
        A = []
        b = []
        e = []

        tmpSections = []
        for i in self.candidates:
            if not i is None:
                tmpSections.append(i)

        numCands = self.numCands
        numSections = len(tmpSections)
        totalElems = numSections*numCands

        # Template constraint
        constr = [0]*numCands*numSections

#        print "\t\t\tCreating objective"
        # Objective function: minimize sum of ranks
        if MIN_RANK:
            f = range(1,numCands+1)*numSections
        else:
            f = []
            for i in tmpSections:
                f += i.getScores()
        

#        print "\t\t\tOne candidate per section"
        # Constraint: Exactly one candidate must be chosen for each section
        for j in range(numSections):
            A.append([0]*numCands*j + [1]*numCands
                     + [0]*numCands*(numSections-j-1))
            b.append(1)
            e.append(0)

#        print "\t\t\tAll pairs similarity"
        # Constraint: (x1 + x2) * sim(x1,x2) <= 1
        
        for p1 in range(numCands - 1):
            for p2 in range(p1, numCands):
                sim = tmpSections[0].sim(tmpSections[0][p1].getID(), tmpSections[0][p2].getID())
                index1 = tmpSections[0][p1].getIndex()
                index2 = tmpSections[0][p2].getIndex()
                index1 = [x for x in index1 if x != -1]
                index2 = [x for x in index2 if x != -1]

                c = constr[:]
                for i in range(numSections):
                    if not tmpSections[i] is None:
                        c[i*numCands+index1[i]] = sim
                        c[i*numCands+index2[i]] = sim
                A.append(c)
                b.append(1.1)
                e.append(-1)

#        print "\t\t\tFormulate"
        
        # Minimize or maximize?
        obj = 0
        if MIN_RANK:
            obj = 1
        
        # Get LP formulation (but don't solve yet)
        lp = lp_maker(f,A,b,e,None,None,range(1,totalElems+1),1,obj)

        return lp
Exemplo n.º 7
0
for day in range(0,numberOfDays):

	slots = parsedDays[day]["Slots"]

	#Create b vector from NumberOfStudents per Slot
	b = [None] * len(A)

	for slotNumber in range(0, len(A) - 2):
		# b[slotNumber] = math.floor(slots[slotNumber]["NumberOfStudents"] / studentsPerTeacher)
		b[slotNumber] = math.ceil(slots[slotNumber]["NumberOfStudents"] / studentsPerTeacher)
		
	b[len(A) -2] = fullTimersAvailable
	b[len(A) -1] = partTimersAvailable

	#Solve model
	lp = lp_maker(f, A, b, signs , None, None, None, 1, 0)
	solvestat = lpsolve('solve', lp)
	obj = lpsolve('get_objective', lp)
	x = lpsolve('get_variables', lp)[0]
	# print "x = " + str(x) 
	lpsolve('delete_lp', lp)


# Create full/part time array results			
	slotsArray = [None] * int(len(A)-2)

	for i in range(int(len(A)-2)):
		# A[i] is a row of the A array -> an array of 1s, 0s
		slot = A[i]
		fullCounter = 0 
		partCounter = 0
Exemplo n.º 8
0
def execute_lp(pts, C, cor, PLOT):

    n = len(pts)
    m = n * (n - 1)  #number of edges

    w_s = [0, 25, 0, 12.5]
    #Definition of the edges
    E = [[0 for i in range(2)] for j in range(m)]
    k = 0
    for i in range(n):
        for j in range(n):
            if (i != j):
                E[k][0] = i
                E[k][1] = j
                k = k + 1
    # ----------  ----------  ----------

    #Definition of the cost vector
    c = []
    for i in range(n):
        for j in range(n):
            if (i != j):
                c.append(C[i][j])
    # ----------  ----------  ----------

    # "Arival constraints" ----------  ----------  ----------
    Aeq1 = [[0 for i in range(m)] for j in range(n)]
    count_line = -1
    for j in range(n):  # 0 until n-1
        count_line = count_line + 1
        for k in range(m):  # 0 until m-1
            if (E[k][1] == j):
                Aeq1[count_line][k] = 1
    beq1 = [1 for i in range(n)]
    #----------  ----------  ----------  ----------  ----------  ----------

    #"Flux conservation constraints" ----------  ----------  ----------
    Aeq2 = [[0 for i in range(m)] for j in range(n)]
    for p in range(n):  # 0 until n-1
        for k in range(0, m):  # 0 until m-1
            if (E[k][1] == p):
                Aeq2[p][k] = 1
            if (E[k][0] == p):
                Aeq2[p][k] = -1
    beq2 = [0 for i in range(n)]
    #----------  ----------  ----------  ----------  ----------  ----------

    #Joining all equality constraints ----------  ----------  ----------
    Aeq = []
    Aeq = Aeq + Aeq1 + Aeq2
    beq = []
    beq = beq + beq1 + beq2
    #----------  ----------  ----------  ----------  ----------  ----------

    #Definition of the x variables bounds
    vlb = []
    vub = []
    #Bouds of "X" variables
    vlb = vlb + [0 for k in range(m)]
    vub = vub + [1 for k in range(m)]
    # ----------  ----------  ----------

    # Definition of the type of constranis (> < =) === (1, -1, 0)
    e = []
    #Equality constraints (=)
    for k in range(len(Aeq)):
        e.append(0)
    # ----------  ----------  ----------

    # Definition of the integer variable
    #int_var = range(1, m + 1, 1)
    int_var = []
    # ----------  ----------  ----------

    # Auto scale flag
    scalemode = 0
    # ----------  ----------  ----------

    # Definition of cost function operand (min or max)
    setminim = 1
    # ----------  ----------  ----------

    lp = lp_maker(c, Aeq, beq, e, vlb, vub, int_var, scalemode, setminim)

    #TIMEOUT = 1.0  # seconds
    #lpsolve('set_timeout', lp, TIMEOUT)

    solvestat = lpsolve('solve', lp)

    #obj = lpsolve('get_objective', lp)

    x = lpsolve('get_variables', lp)[0]

    lpsolve('delete_lp', lp)

    #PLOT = True
    if PLOT:
        #Plotting results  ----------  ----------  ----------
        pylab.axis('equal')
        pylab.axis(w_s)
        for k in range(n):
            pylab.text(pts[k][0] + 0.04,
                       pts[k][1] + 0.04,
                       k,
                       fontsize=10.0,
                       color=cor)

        k = -1
        for i in range(n):
            for j in range(n):
                if (i != j):
                    k = k + 1
                    if (abs(x[k] - 1) < 10**(-6)):
                        pylab.plot([pts[i][0], pts[j][0]],
                                   [pts[i][1], pts[j][1]],
                                   cor + '-',
                                   linewidth=2.0)

        #pylab.show()
    # ----------  ----------  ----------  ----------  ----------  ----------

    if (solvestat == 0):
        chosen = []
        for k in range(m):
            if (abs(x[k] - 1) < 10**(-6)):
                chosen.append(E[k])
        chosen = np.matrix(chosen)
        chosen = chosen.T
    else:
        chosen = -1
        print 'Optimal solution not found'
        print 'Here is solvestat: ', solvestat

    return (chosen)
Exemplo n.º 9
0
def atribute_clusters(speeds, search_speeds, Cost_cluster_len, Cost_cluster_sp,
                      Cost_cluster_to_go):

    R = len(speeds)
    T = len(Cost_cluster_len)

    print 'Number on robots: ', R, '\nNumber of clusters: ', T

    #C = [[r/t for r in Cost_cluster] for t in Power_robot]
    #C[r][t] is the cost of r search t

    C = [[0 for r in Cost_cluster_len] for t in speeds]
    for r in range(R):
        for t in range(T):
            C[r][t] = Cost_cluster_len[t] / speeds[r] + Cost_cluster_sp[
                t] / search_speeds[r] + Cost_cluster_to_go[r][t] / speeds[r]

    m = R * T

    #Definition of the cost vector
    c = []
    #Cost of "x" variables
    c = c + [0 for k in range(R * T)]
    # Cost of "F" variable
    c.append(1)
    # ----------  ----------  ----------

    #Assignment constraints ----------  ----------  ----------
    Aeq1 = [[0 for i in range(R * T)] for j in range(T)]
    for t in range(T):
        for r in range(R):
            Aeq1[t][r * T + t] = 1
    for k in range(len(Aeq1)):
        Aeq1[k].append(0)
    beq1 = [1 for i in range(T)]
    #----------  ----------  ----------  ----------  ----------  ----------

    #MinMax constraints ----------  ----------  ----------
    AF = [[0 for i in range(R * T)] for j in range(R)]
    for r in range(R):
        for t in range(T):
            AF[r][r * T + t] = C[r][t]
    bF = [0 for r in range(R)]
    #Adding 'F' variable
    for k in range(len(AF)):
        AF[k].append(-1)
    #----------  ----------  ----------  ----------  ----------  ----------

    Aineq = AF
    bineq = bF
    Aeq = Aeq1
    beq = beq1

    #Joining all constraints ----------  ----------  ----------
    A = []
    b = []
    #Inequality constraints:
    for line in Aineq:
        A.append(line)
    for number in bineq:
        b.append(number)
    #Equality constraints:
    for line in Aeq:
        A.append(line)
    for number in beq:
        b.append(number)
    #----------  ----------  ----------  ----------  ----------  ----------

    #Definition of the x variables bounds
    vlb = []
    vub = []
    #Bouds of "X" variables
    vlb = vlb + [0 for k in range(R * T)]
    vub = vub + [1 for k in range(R * T)]
    # Bouds of "F" variable
    vlb.append(0)
    vub.append(10000)  #big positive number
    # ----------  ----------  ----------

    # Definition of the type of constranis (> < =)
    e = []
    # Inequality constraints (<)
    for k in range(len(Aineq)):
        e.append(-1)
    #Equality constraints (=)
    for k in range(len(Aeq)):
        e.append(0)
    # ----------  ----------  ----------

    # Definition of the integer variable
    int_var = range(1, R * T + 1, 1)
    # ----------  ----------  ----------

    # Auto scale flag
    scalemode = 0
    # ----------  ----------  ----------

    # Definition of cost function operand (min or max)
    setminim = 1
    # ----------  ----------  ----------

    lp = lp_maker(c, A, b, e, vlb, vub, int_var, scalemode, setminim)

    solvestat = lpsolve('solve', lp)

    #obj = lpsolve('get_objective', lp)

    x = lpsolve('get_variables', lp)[0]

    lpsolve('delete_lp', lp)

    return x
Exemplo n.º 10
0
def solveIt(inputData):
    # Modify this code to run your optimization algorithm

    # parse the input
    lines = inputData.split('\n')

    firstLine = lines[0].split()
    nodeCount = int(firstLine[0])
    edgeCount = int(firstLine[1])

    edges = []
    for i in range(1, edgeCount + 1):
        line = lines[i]
        parts = line.split()
        edges.append((int(parts[0]), int(parts[1])))
    # build a trivial solution
    # every node has its own color
        #items = len(values)
        #define n constraints fir each possible color:
    maxNumColors=20#int(math.floor(nodeCount//4))
    #overall number of variables= numNodes+numEdges
    c=([1]*maxNumColors)+([0]*(maxNumColors*nodeCount))
    lower=[0]*len(c)
    upper=[1]*len(c)
    intIndices=range(1,len(c)+1)
    b=[]
    e=[]
    #each node is colored with one color:
    A=[[0]*maxNumColors*(i+1)+[1]*maxNumColors+[0]*maxNumColors*(nodeCount-i-1) for i in range(nodeCount)]#total number of variabes=(maxnumcols)*(nodecount+1)
    b.append([1]*len(A))
    e.append([0]*len(A))#equality constraints
    # xik-yi<=0- that these are nodeCount*nodeCount constraints
    for nd in range(nodeCount):
        for col in range(maxNumColors):
            cons=[0]*len(c)
            cons[col]=-1
            cons[maxNumColors*(nd+1)+col]=1
            A.append(cons)
    e.append([-1]*(nodeCount*maxNumColors))
    b.append([0]*(nodeCount*maxNumColors))

    # the third constraind- one for each edge and each k
    #smaller than 1
    for ed in edges:
        for col in range(maxNumColors):
            cons=[0]*len(c)
            cons[(ed[0]+1)*maxNumColors+col]=1
            cons[(ed[1]+1)*maxNumColors+col]=1
            A.append(cons)
    e.append([-1]*(maxNumColors*edgeCount))
    b.append([1]*(maxNumColors*edgeCount))

    # #smaller than 1
    # for ed in edges:
    #     for col in range(nodeCount):
    #         cons=[0]*len(c)
    #         cons[ed[0]*(nodeCount+1)+col]=1
    #         cons[ed[1]*(nodeCount+1)+col]=1
    #         A.append(cons)
    # e.append([-1]*(nodeCount*edgeCount))
    # b.append([1]*(nodeCount*edgeCount))
    #
    # #larger than 0
    # for ed in edges:
    #     for col in range(nodeCount):
    #         cons=[0]*len(c)
    #         cons[ed[0]*(nodeCount+1)+col]=1
    #         cons[ed[1]*(nodeCount+1)+col]=1
    #         A.append(cons)
    # e.append([1]*(nodeCount*edgeCount))
    # b.append([0]*(nodeCount*edgeCount))

    #constraints 5 and 6 are in upper, lower and intIndices
    # a trivial greedy algorithm for filling the knapsack
    # it takes items in-order until the knapsack is full
    b = [val for subl in b for val in subl]
    e = [val for subl in e for val in subl]
    lp=lp_maker(c, A, b, e, lower, upper,intIndices,setminim=1)
    lpsolve('set_timeout',lp,600)
    lpsolve('solve', lp)
    obj=lpsolve('get_objective', lp)
    #print(c)
    #print(obj)
    x=lpsolve('get_variables', lp)[0]
    flag=lpsolve('get_variables', lp)[1]
    lpsolve('delete_lp', lp)
    # print(x)

    # for k in range(nodeCount):
    #     print(x[((k+1)*nodeCount):((k+2)*(nodeCount))])
    print(nodeCount,maxNumColors)
    print(sum(x[:maxNumColors]))
    solution = [x[((node+1)*maxNumColors):((node+2)*(maxNumColors))].index(1)+1 for node in range(nodeCount)]
    sList=sorted(solution)
    sList.sort()
    d={}
    for i in sList:
        if(i in d.keys()):
            continue
        else:
            d[i]=len(d.keys())
    solution=map(lambda x:d[x],solution)
    objFunction=x
    # prepare the solution in the specified output format
    outputData = str(int(obj)) + ' ' + str(int(flag)) + '\n'
    outputData += ' '.join(map(lambda x:str(int(x)), solution))
    return outputData
Exemplo n.º 11
0
def ec2(request):
    '''
    min aikenuoyan + heizheshi + huiyan + keluojishi + shuangduoteshi + pianmayan
    
    aikenuoyan = 22000santaihejin + 2500leiyin + 320chaoshikuang  28367
    heizheshi = 10000santaihejin + 1600tongweijuheti + 120chaoxinxing  28394
    huiyan = 56000santaihejin + 450tongweijuheti + 12050leijingti + 2100leiyin  28420
    keluojishi = 21000santaihejin + 135jingzhuangshiying + 760chaoxinxing  28391
    shuangduoteshi = 450jingzhuangshiying +12000leijingti  28388
    pianmayan = 300tongweijuheti + 2200leijingti + 2400leiyin  28397
    
    22000aikenuoyan + 10000heizheshi + 56000huiyan + 2100keluojishi >=
    1600heizheshi + 450huiyan + 300pianmayan >=
    135keluojishi + 450shuangduoteshi >=
    12050huiyan + 12000shuangduoteshi + 2200pianmayan >=
    2500aikenuoyan + 2100huiyan + 2400pianmayan >=
    320aikenuoyan + 100shuangduoteshi >=
    120heizheshi + 760keluojishi >=
    '''
    request.encoding = 'utf-8'
    #获取前端选择的参与计算的矿石checkbox拼接字符串
    kuangs = request.POST['kuang']
    kl1 = [int(x) for x in kuangs.split(",")]

    kuangname = [
        "希莫非特Hemorphite", "水硼砂Kernite", "奥贝尔石Omber", "斜长岩Plagioclase",
        "干焦岩Pyroxeres", "灼烧岩Scordite", "凡晶石Veldspar", "同位原矿Hedbergite",
        "杰斯贝矿Jaspet", "艾克诺岩Arkonor", "黑赭石Dark Ochre", "灰岩Spodumain",
        "克洛基石Crokite", "双多特石Bistot", "片麻岩Gneiss"
    ]
    kuanglian = {
        "希莫非特Hemorphite": [2200, 100, 15, 0, 0, 0, 120],
        "水硼砂Kernite": [134, 134, 0, 0, 267, 0, 0],
        "奥贝尔石Omber": [800, 85, 0, 100, 0, 0, 0],
        "斜长岩Plagioclase": [107, 0, 0, 213, 107, 0, 0],
        "干焦岩Pyroxeres": [351, 0, 0, 25, 50, 0, 5],
        "灼烧岩Scordite": [346, 0, 0, 173, 0, 0, 0],
        "凡晶石Veldspar": [415, 0, 0, 0, 0, 0, 0],
        "同位原矿Hedbergite": [0, 200, 19, 1000, 0, 0, 100],
        "杰斯贝矿Jaspet": [0, 0, 8, 0, 350, 0, 75],
        "艾克诺岩Arkonor": [22000, 0, 0, 0, 2500, 320, 0],
        "黑赭石Dark Ochre": [10000, 1600, 0, 0, 0, 0, 120],
        "灰岩Spodumain": [56000, 450, 0, 12050, 2100, 0, 0],
        "克洛基石Crokite": [21000, 0, 135, 0, 0, 0, 750],
        "双多特石Bistot": [0, 0, 450, 12000, 0, 100, 0],
        "片麻岩Gneiss": [0, 300, 0, 2200, 2400, 0, 0]
    }
    kuanglianlist = []
    for i in kuangname:
        kuanglianlist.append(kuanglian[i])

    kl2 = []  #用来获取各个所需矿石的精炼列表
    for i in kl1:
        kl2.append(kuanglian[kuangname[i]])

    daijinglian = [[], [], [], [], [], [], []]
    for i in range(0, 7):
        for j in kl2:
            daijinglian[i].append(j[i])
    print(daijinglian)

    #这里需要改成xx key and xx key
    kuangpricelist = []
    kuangidlist = [
        28403, 28410, 28416, 28422, 28424, 28429, 28432, 28401, 28406, 28367,
        28394, 28420, 28391, 28388, 28397
    ]
    kuangpricelistall = [
        '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''
    ]
    for i in kl1:
        is_cache = cache.get(kuangname[i])
        if (is_cache):
            kuangpricelist.append(is_cache)
            kuangpricelistall[i] = is_cache
        else:
            req_url = 'https://api.evemarketer.com/ec/marketstat/json?typeid=' + str(
                kuangidlist[i]) + '&regionlimit=10000002'
            req = requests.get(req_url)  #发送请求
            rt = req.text  #获取响应信息
            itemPriceInfo = json.loads(rt)  #将JSON str转换为原格式,此处为list格式
            itemBuy = itemPriceInfo[0]['buy']['max']  #获取jita buy最高价
            kuangpricelist.append(itemBuy)
            cache.set(kuangname[i], itemBuy, 600)
            kuangpricelistall[i] = itemBuy

    print(kuangpricelist)
    '''
    n_santaihejin = 774565133
    n_tongweijuheti = 10489443
    n_jingzhuangshiying = 1091619
    n_leijingti = 183660168
    n_leiyin = 72099790
    n_chaoshikuang = 431586
    n_chaoxinxing = 2951669
    '''
    n_santaihejin = int(request.POST['santai'])
    n_tongweijuheti = int(request.POST['tongwei'])
    n_jingzhuangshiying = int(request.POST['jingzhuang'])
    n_leijingti = int(request.POST['leijing'])
    n_leiyin = int(request.POST['leiyin'])
    n_chaoshikuang = int(request.POST['chaoshi'])
    n_chaoxinxing = int(request.POST['chaoxin'])

    #获取到输入的矿物需求,接下来加上旗舰组件的数据
    #旗舰组件矿数量
    qj0 = ['457050', '6938', '604', '110416', '41994', '302', '2110']
    qj1 = ['546912', '7760', '876', '113826', '45010', '386', '2358']
    qj2 = ['443591', '6659', '666', '101026', '40877', '298', '1804']
    qj3 = ['473141', '7109', '682', '111118', '43324', '304', '2141']
    qj4 = ['326973', '6440', '660', '107842', '39547', '280', '1841']
    qj5 = ['510149', '7491', '728', '110413', '45621', '334', '2191']
    qj6 = ['498880', '7269', '696', '104957', '43194', '332', '2033']
    qj7 = ['749916', '8617', '908', '142710', '49913', '444', '2249']
    qj8 = ['347163', '4499', '486', '83248', '33332', '172', '1258']
    qj9 = ['427708', '6581', '648', '111110', '44110', '296', '1858']
    qj10 = ['388208', '5104', '538', '93777', '37729', '212', '1530']
    qj11 = ['1121659', '17669', '1488', '278776', '75379', '1134', '4176']
    qj12 = ['640393', '8888', '1082', '139591', '48471', '444', '2612']
    qj13 = ['841877', '11132', '1108', '207776', '61980', '572', '3317']
    qj14 = ['555658', '7916', '908', '125277', '47249', '428', '2438']
    qj15 = ['576759', '9010', '914', '189942', '53312', '416', '2461']
    qj16 = ['583442', '9321', '938', '145664', '51297', '436', '2678']
    qj17 = ['874902', '3504', '286', '72154', '24616', '64', '998']
    qjksl = [
        qj0, qj1, qj2, qj3, qj4, qj5, qj6, qj7, qj8, qj9, qj10, qj11, qj12,
        qj13, qj14, qj15, qj16, qj17
    ]
    #旗舰组件所需数量
    q0 = int(request.POST['qj0'])
    q1 = int(request.POST['qj1'])
    q2 = int(request.POST['qj2'])
    q3 = int(request.POST['qj3'])
    q4 = int(request.POST['qj4'])
    q5 = int(request.POST['qj5'])
    q6 = int(request.POST['qj6'])
    q7 = int(request.POST['qj7'])
    q8 = int(request.POST['qj8'])
    q9 = int(request.POST['qj9'])
    q10 = int(request.POST['qj10'])
    q11 = int(request.POST['qj11'])
    q12 = int(request.POST['qj12'])
    q13 = int(request.POST['qj13'])
    q14 = int(request.POST['qj14'])
    q15 = int(request.POST['qj15'])
    q16 = int(request.POST['qj16'])
    q17 = int(request.POST['qj17'])
    qjsl = [
        q0, q1, q2, q3, q4, q5, q6, q7, q8, q9, q10, q11, q12, q13, q14, q15,
        q16, q17
    ]

    #旗舰需要的矿物先清零
    qn_santaihejin = 0
    qn_tongweijuheti = 0
    qn_jingzhuangshiying = 0
    qn_leijingti = 0
    qn_leiyin = 0
    qn_chaoshikuang = 0
    qn_chaoxinxing = 0

    for i in range(0, 18):
        qn_santaihejin = qn_santaihejin + int(qjksl[i][0]) * int(qjsl[i])
        qn_tongweijuheti = qn_tongweijuheti + int(qjksl[i][1]) * int(qjsl[i])
        qn_jingzhuangshiying = qn_jingzhuangshiying + int(qjksl[i][2]) * int(
            qjsl[i])
        qn_leijingti = qn_leijingti + int(qjksl[i][3]) * int(qjsl[i])
        qn_leiyin = qn_leiyin + int(qjksl[i][4]) * int(qjsl[i])
        qn_chaoshikuang = qn_chaoshikuang + int(qjksl[i][5]) * int(qjsl[i])
        qn_chaoxinxing = qn_chaoxinxing + int(qjksl[i][6]) * int(qjsl[i])

    #加上旗舰组件之后,目前n_为未减免前所有需要的矿物
    #接下来计算图纸和建筑插、建筑减免
    tuzhicailiao = int(request.POST['tuzhicailiao'])
    jianzhucha = float(request.POST['jianzhucha'])
    jianzhu = int(request.POST['jianzhu'])
    #计算出最终旗舰减免
    jianmian = (100 - tuzhicailiao) / 100 * (100 - jianzhu) / 100 * (
        100 - jianzhucha) / 100

    qn_santaihejin = math.ceil(qn_santaihejin * jianmian)
    qn_tongweijuheti = math.ceil(qn_tongweijuheti * jianmian)
    qn_jingzhuangshiying = math.ceil(qn_jingzhuangshiying * jianmian)
    qn_leijingti = math.ceil(qn_leijingti * jianmian)
    qn_leiyin = math.ceil(qn_leiyin * jianmian)
    qn_chaoshikuang = math.ceil(qn_chaoshikuang * jianmian)
    qn_chaoxinxing = math.ceil(qn_chaoxinxing * jianmian)

    #通过精炼率计算出化矿产物
    jinglianlv = float(request.POST['jinglianlv']) / 100

    #减去已有的矿石数量
    hk0 = int(request.POST['h_kuang0'])
    hk1 = int(request.POST['h_kuang1'])
    hk2 = int(request.POST['h_kuang2'])
    hk3 = int(request.POST['h_kuang3'])
    hk4 = int(request.POST['h_kuang4'])
    hk5 = int(request.POST['h_kuang5'])
    hk6 = int(request.POST['h_kuang6'])
    hk7 = int(request.POST['h_kuang7'])
    hk8 = int(request.POST['h_kuang8'])
    hk9 = int(request.POST['h_kuang9'])
    hk10 = int(request.POST['h_kuang10'])
    hk11 = int(request.POST['h_kuang11'])
    hk12 = int(request.POST['h_kuang12'])
    hk13 = int(request.POST['h_kuang13'])
    hk14 = int(request.POST['h_kuang14'])
    havekuanglist = [
        hk0, hk1, hk2, hk3, hk4, hk5, hk6, hk7, hk8, hk9, hk10, hk11, hk12,
        hk13, hk14
    ]
    h_santaihejin = 0
    h_tongweijuheti = 0
    h_jingzhuangshiying = 0
    h_leijingti = 0
    h_leiyin = 0
    h_chaoshikuang = 0
    h_chaoxinxing = 0
    for i in range(0, 15):
        h_santaihejin = h_santaihejin + math.floor(
            havekuanglist[i] * kuanglianlist[i][0] * jinglianlv)
        h_tongweijuheti = h_tongweijuheti + math.floor(
            havekuanglist[i] * kuanglianlist[i][1] * jinglianlv)
        h_jingzhuangshiying = h_jingzhuangshiying + math.floor(
            havekuanglist[i] * kuanglianlist[i][2] * jinglianlv)
        h_leijingti = h_leijingti + math.floor(
            havekuanglist[i] * kuanglianlist[i][3] * jinglianlv)
        h_leiyin = h_leiyin + math.floor(
            havekuanglist[i] * kuanglianlist[i][4] * jinglianlv)
        h_chaoshikuang = h_chaoshikuang + math.floor(
            havekuanglist[i] * kuanglianlist[i][5] * jinglianlv)
        h_chaoxinxing = h_chaoxinxing + math.floor(
            havekuanglist[i] * kuanglianlist[i][6] * jinglianlv)

    #至此得到最终所需矿物
    n_santaihejin = n_santaihejin + qn_santaihejin - h_santaihejin
    n_tongweijuheti = n_tongweijuheti + qn_tongweijuheti - h_tongweijuheti
    n_jingzhuangshiying = n_jingzhuangshiying + qn_jingzhuangshiying - h_jingzhuangshiying
    n_leijingti = n_leijingti + qn_leijingti - h_leijingti
    n_leiyin = n_leiyin + qn_leiyin - h_leiyin
    n_chaoshikuang = n_chaoshikuang + qn_chaoshikuang - h_chaoshikuang
    n_chaoxinxing = n_chaoxinxing + qn_chaoxinxing - h_chaoxinxing

    A = [[], [], [], [], [], [], []]
    #A在最开始获取选取的矿石时已定义
    for i in range(len(daijinglian)):
        for j in range(len(daijinglian[i])):
            A[i].append(math.floor(daijinglian[i][j] * jinglianlv))
    print(A)

    l = []
    for i in range(len(kl1)):
        l.append(0)

    #以最少花费计算
    f = kuangpricelist
    #以最少矿石数量计算
    #f=[1,1,1,1,1,1]
    #列表A在上面的精炼计算区域已经定义了
    #A=[[22000,10000,56000,2100,0,0],[0,1600,450,0,0,300],[0,0,0,135,450,0],[0,0,12050,0,12000,2200],[2500,0,2100,0,0,2400],[320,0,0,0,100,0],[0,120,0,760,0,0]]
    b = [
        n_santaihejin, n_tongweijuheti, n_jingzhuangshiying, n_leijingti,
        n_leiyin, n_chaoshikuang, n_chaoxinxing
    ]
    e = [1, 1, 1, 1, 1, 1, 1]  #全大于
    #l=[0,0,0,0,0,0]#最小值

    lp = lp_maker(f, A, b, [1, 1, 1, 1, 1, 1, 1], l, None, None, 1, 1)
    #set_int(lp,1,TRUE)
    solvestat = lpsolve('solve', lp)
    y = lpsolve('get_variables', lp)[0]
    x = []
    if (isinstance(y, list)):
        x = y
    else:
        x.append(y)
    print(x)
    #将规划好的数据向上取整,得到各高密度矿石数量
    for i in range(len(x)):
        x[i] = math.ceil(x[i])

    #这个answer变量好像没用上,本意是最终所有矿石的结果和所有矿石的价格表遍历相乘,但是后来使用了最终结果的x列表和指定矿石的价格。
    answer = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    for i in range(len(kl1)):
        answer[kl1[i]] = int(x[i])
    '''
    #这里获取输入的已有矿石数量,要求格式:名字-数量-组
    tas="""三晶双多特斜岩	79	双多特石
    三钛合金	52	矿物
    三钛合金	7,064,097	矿物"""
    tasp=tas.split("\n")
    print(tasp)
    tasd={}
    for i in range(len(tasp)):
        tasp[i]=tasp[i].split("\t")
        tasp[i]=tasp[i][1:3]
        tasp[i]=tasp[i][::-1]
        print(tasp[i])
        key = tasp[i][0]
        if key in tasd:
            tasd[key]+=int(tasp[i][1].replace(',',''))
        else:
            tasd[key]=int(tasp[i][1].replace(',',''))
    
    print(tasd)
    
    if '艾克诺岩' in tasd:
        x[0]=x[0]-tasd['艾克诺岩']
    if '黑赭石' in tasd:
        x[1]=x[1]-tasd['黑赭石']
    if '灰岩' in tasd:
        x[2]=x[2]-tasd['灰岩']    
    if '克洛基石' in tasd:
        x[3]=x[3]-tasd['克洛基石'] 
    if '双多特石' in tasd:
        x[4]=x[4]-tasd['双多特石']
    if '片麻岩' in tasd:
        x[5]=x[5]-tasd['片麻岩']
    #这里算好最后需要的矿石数量
    '''

    #f_ = h_ + anwser[]
    f_santaihejin = h_santaihejin
    f_tongweijuheti = h_tongweijuheti
    f_jingzhuangshiying = h_jingzhuangshiying
    f_leijingti = h_leijingti
    f_leiyin = h_leiyin
    f_chaoshikuang = h_chaoshikuang
    f_chaoxinxing = h_chaoxinxing
    for i in range(0, 15):
        f_santaihejin = f_santaihejin + math.floor(
            answer[i] * kuanglianlist[i][0] * jinglianlv)
        f_tongweijuheti = f_tongweijuheti + math.floor(
            answer[i] * kuanglianlist[i][1] * jinglianlv)
        f_jingzhuangshiying = f_jingzhuangshiying + math.floor(
            answer[i] * kuanglianlist[i][2] * jinglianlv)
        f_leijingti = f_leijingti + math.floor(
            answer[i] * kuanglianlist[i][3] * jinglianlv)
        f_leiyin = f_leiyin + math.floor(
            answer[i] * kuanglianlist[i][4] * jinglianlv)
        f_chaoshikuang = f_chaoshikuang + math.floor(
            answer[i] * kuanglianlist[i][5] * jinglianlv)
        f_chaoxinxing = f_chaoxinxing + math.floor(
            answer[i] * kuanglianlist[i][6] * jinglianlv)

    cost = 0
    for i in range(len(kuangpricelist)):
        #cost = cost + answer[i]*kuangpricelist[i]
        cost = cost + x[i] * kuangpricelist[i]

    context = {}
    #名字数组kuangname,answer,havekuanglist,kuangpricelistall
    context["kuang"] = list(
        zip(kuangname, answer, havekuanglist, kuangpricelistall))

    context['cost'] = format(cost, ',')

    context['n_santai'] = n_santaihejin
    context['n_tongwei'] = n_tongweijuheti
    context['n_jingzhuang'] = n_jingzhuangshiying
    context['n_leijing'] = n_leijingti
    context['n_leiyin'] = n_leiyin
    context['n_chaoshi'] = n_chaoshikuang
    context['n_chaoxin'] = n_chaoxinxing
    context['f_santai'] = f_santaihejin
    context['f_tongwei'] = f_tongweijuheti
    context['f_jingzhuang'] = f_jingzhuangshiying
    context['f_leijing'] = f_leijingti
    context['f_leiyin'] = f_leiyin
    context['f_chaoshi'] = f_chaoshikuang
    context['f_chaoxin'] = f_chaoxinxing
    context['m_santai'] = f_santaihejin - n_santaihejin
    context['m_tongwei'] = f_tongweijuheti - n_tongweijuheti
    context['m_jingzhuang'] = f_jingzhuangshiying - n_jingzhuangshiying
    context['m_leijing'] = f_leijingti - n_leijingti
    context['m_leiyin'] = f_leiyin - n_leiyin
    context['m_chaoshi'] = f_chaoshikuang - n_chaoshikuang
    context['m_chaoxin'] = f_chaoxinxing - n_chaoxinxing

    return render(request, 'ec2.html', context)