Halcom 发表于 2018-12-15 23:13:48

采用Gurobi+Python平台,非线性规划计算

Gurobi+Python平台、Python+Gurobi入门

代码参考:from gurobipy import *


def HFS_Model_MS(nJ, M, P):
    print('MS')
    # model
    m = Model()
    X = {}
    Y = {}
    T = {}
    C = {}
    CS = {}
    S = {}
    bigM = {}
    ms = {}

    # paramters
    Mi = [[], [], [], []]
    nI = len(M)
    nL = len(P)
    bigM = 100000

    it = 0
    for i in range(nI):
      for j in range(M):
            Mi.append(it)
            it = it + 1

    # variables
    for j in range(nJ):
      for k in range(nJ):
            X[(j, k)] = m.addVar(vtype=GRB.BINARY, name="X%d,%d" % (j, k))

    for i in range(nI):
      for k in range(nJ):
            for l in range(nL):
                Y[(i, k, l)] = m.addVar(vtype=GRB.BINARY, name="Y%d,%d,%d" % (i, k, l))

    for j in range(nJ):
      for i in range(nI):
            T[(j, i)] = m.addVar(vtype=GRB.CONTINUOUS, name="T%d,%d" % (j, i))
            C[(j, i)] = m.addVar(vtype=GRB.CONTINUOUS, name="C%d,%d" % (j, i))

    for i in range(nI):
      for k in range(nJ):
            CS[(i, k)] = m.addVar(vtype=GRB.CONTINUOUS, name="CS%d,%d" % (i, k))
            S[(i, k)] = m.addVar(vtype=GRB.CONTINUOUS, name="S%d,%d" % (i, k))

    ms = m.addVar(vtype=GRB.CONTINUOUS, name='ms')

    m.update()

    # constraints
    for j in range(nJ):
      m.addConstr(quicksum(X[(j, k)] for k in range(nJ)) == 1)

    for k in range(nJ):
      m.addConstr(quicksum(X[(j, k)] for j in range(nJ)) == 1)

    for i in range(nI):
      for k in range(nJ):
            m.addConstr(quicksum(Y[(i, k, l)] for l in Mi) == 1)

    for i in range(nI - 1):
      for j in range(nJ):
            for k in range(nJ):
                for l in range(nL):
                  m.addConstr(T[(j, i + 1)] >= T[(j, i)] + P - bigM * (2 - X[(j, k)] - Y[(i, k, l)]))

    for i in range(nI):
      for k in range(1, nJ):
            for t in range(nJ):
                for l in range(nL):
                  if (t < k):
                        m.addConstr(S[(i, k)] >= S[(i, t)] + quicksum(
                            P * X[(j, t)] - bigM * (2 - Y[(i, k, l)] - Y[(i, t, l)]) for j in range(nJ)))

    for i in range(nI):
      for k in range(nJ):
            for j in range(nJ):
                m.addConstr(S[(i, k)] >= T[(j, i)] - bigM * (1 - X[(j, k)]))
                m.addConstr(S[(i, k)] <= T[(j, i)] + bigM * (1 - X[(j, k)]))

    for i in range(nI):
      for j in range(nJ):
            for k in range(nJ):
                for l in range(nL):
                  m.addConstr(C[(j, i)] >= T[(j, i)] + P - bigM * (2 - X[(j, k)] - Y[(i, k, l)]))

    for i in range(nI):
      for k in range(nJ):
            for l in range(nL):
                m.addConstr(CS[(i, k)] >= S[(i, k)] + quicksum(X[(j, k)] * P for j in range(nJ)) - bigM * (
                        1 - Y[(i, k, l)]))

    for i in range(nI):
      for j in range(nJ):
            m.addConstr(T[(j, i)] >= 0)
            m.addConstr(C[(j, i)] >= 0)

    for i in range(nI):
      for k in range(nJ):
            m.addConstr(S[(i, k)] >= 0)
            m.addConstr(CS[(i, k)] >= 0)

    for j in range(nJ):
      m.addConstr(ms >= C[(j, nI - 1)])

    # set objective
    m.setObjective(ms, GRB.MINIMIZE)

    m.setParam("TimeLimit", 3600)
    m.setParam("OutputFlag", False)

    # optimize
    m.optimize()

    # for (j, k) in X:
    #   if X[(j, k)].x >= 0.9:
    #      print("Wert von X" + str((j, k)) + ": " + str(X[(j, k)].x))

    # for (i, k, l) in Y:
    #   if Y[(i, k, l)].x >= 0.9:
    #      print("Wert von Y" + str((i, k, l)) + ": " + str(Y[(i, k, l)].x))

    # for (j,i) in T:
    # if T[(j,i)].x >= 1:
    # print("Wert von T" + str((j,i))+ ": " + str(T[(j,i)].x ))

    # for (i,k) in S:
    # if S[(i,k)].x >= 1:
    # print("Wert von S" + str((i,k))+ ": " + str(S[(i,k)].x ))

    # for (j, i) in C:
    # if C[(j,i)].x >= 1:
    #print("Wert von C" + str((j, i)) + ": " + str(C[(j, i)].x))

    # for (i,k) in CS:
    # if CS[(i,k)].x >= 1:
    # print("Wert von CS" + str((i,k))+ ": " + str(CS[(i,k)].x ))

    m.write("model_ms.lp")
    return m.objVal, m.Runtime, m.status


def main():
    nJ = 0
    M =
    P = []

    results_MS = open("Results_MS.txt", "w")
    results_MS.write("Nr." + "" + "Obj_Val" + "" + "Run_Time" + "" + "Status \n")

    for inst in range(13,192):
      with open("I4_" + str(inst + 1) + ".txt", "r") as textFile:
            lines =
      textFile.close()

      nJ = int(lines)
      M = int(lines)
      M = int(lines)
      M = int(lines)
      M = int(lines)
      nM: int = M + M + M + M

      P = [ for j in range(nJ)]

      z = 0
      for i in range(nM):
            for j in range(nJ):
                P = float(lines)
                z = z + 1

      print(inst)
      obj_Val_MS, run_Time_MS, status_MS = HFS_Model_MS(nJ, M, P)
      results_MS.write(
            str(inst + 1) + "" + str(obj_Val_MS) + "" + str(run_Time_MS) + "" + str(status_MS) + "\n")

    results_MS.close()


main()


页: [1]
查看完整版本: 采用Gurobi+Python平台,非线性规划计算