Hello Mat

 找回密码
 立即注册
查看: 8990|回复: 0

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

[复制链接]

1323

主题

1551

帖子

0

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22647
发表于 2018-12-15 23:13:48 | 显示全部楼层 |阅读模式
Gurobi+Python平台Python+Gurobi入门

代码参考:
  1. from gurobipy import *


  2. def HFS_Model_MS(nJ, M, P):
  3.     print('MS')
  4.     # model
  5.     m = Model()
  6.     X = {}
  7.     Y = {}
  8.     T = {}
  9.     C = {}
  10.     CS = {}
  11.     S = {}
  12.     bigM = {}
  13.     ms = {}

  14.     # paramters
  15.     Mi = [[], [], [], []]
  16.     nI = len(M)
  17.     nL = len(P[1])
  18.     bigM = 100000

  19.     it = 0
  20.     for i in range(nI):
  21.         for j in range(M[i]):
  22.             Mi[i].append(it)
  23.             it = it + 1

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

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

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

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

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

  41.     m.update()

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

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

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

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

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

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

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

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

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

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

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

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

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

  91.     # optimize
  92.     m.optimize()

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

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

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

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

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

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

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


  113. def main():
  114.     nJ = 0
  115.     M = [0, 0, 0, 0]
  116.     P = []

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

  119.     for inst in range(13,192):
  120.         with open("I4_" + str(inst + 1) + ".txt", "r") as textFile:
  121.             lines = [line.split() for line in textFile]
  122.         textFile.close()

  123.         nJ = int(lines[3][0])
  124.         M[0] = int(lines[5][0])
  125.         M[1] = int(lines[6][0])
  126.         M[2] = int(lines[7][0])
  127.         M[3] = int(lines[8][0])
  128.         nM: int = M[0] + M[1] + M[2] + M[3]

  129.         P = [[0 for i in range(nM)] for j in range(nJ)]

  130.         z = 0
  131.         for i in range(nM):
  132.             for j in range(nJ):
  133.                 P[j][i] = float(lines[z + 10][0])
  134.                 z = z + 1

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

  139.     results_MS.close()


  140. main()
复制代码



算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Python|Opencv|MATLAB|Halcom.cn ( 蜀ICP备16027072号 )

GMT+8, 2024-11-25 11:41 , Processed in 0.192316 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表