import gurobipy as gp import numpy as np # 定义参数 c_p = 22 tau = 135000 C_re = 20 C_se = 30 h = 3.25 q = 0.2 e = 18.98 S = 10 T = 20 expr2_1 = (C_req+C_se)e m = np.full((1, T), 3) z = np.around((1-1np.random.rand(T, S)) * 3) # 创建模型 model = gp.Model() # 创建变量 x = model.addVar(lb=0, name='x') k = model.addVar(lb=0, name='k') y = model.addVars(S, lb=0, name='y') a = model.addVars(T,S, vtype=gp.GRB.BINARY, name="a") # a = model.addVars(T, S, lb=0, name='a') b = model.addVars(T, S, lb=0, name='b') # 创建约束 for s in range(S): expa = c_p * x + e * h * x + (1/S) * gp.quicksum(y[t] for t in range(S)) model.addConstr(expa <= tau, name=f'c1_{s}') expb1=gp.quicksum(3a[t,s] for t in range(T)) expb2=gp.quicksum((expr2_1-a[t,s]+b[t,s])*z[t,s] for t in range (T)) expb = expb1+expb2 model.addConstr(y[s] >= expb, name=f'c2_{s}') # expc = gp.quicksum(abs(expr2_1-a[t,s]+b[t,s]) for t in range (T)) expc = gp.quicksum((expr2_1 - a[t, s] + b[t, s]) for t in range(T)) model.addConstr(expc <= k, name=f'c3_{s}') # 创建目标 model.setObjective(k, gp.GRB.MINIMIZE) # 求解 model.optimize() print("Optimal Objective Value", model.objVal) for var in model.getVars(): print(f"{var.varName}: {round(var.X, 3)}")为什么修改数值,x的最优解都是0
时间: 2023-11-12 14:05:31 浏览: 34
在模型中,约束c1_s 中的表达式中包含了变量x和y,而约束c2_s 中的表达式中又包含了变量a和b。这些变量之间是互相影响的,可能存在因为某些变量取值不合理导致整个模型无法求解的情况。因此,我们需要检查每个变量的取值范围和约束条件是否正确,以及是否存在逻辑或算法上的错误。
此外,在定义z数组时,代码中可能存在语法错误。应该修改为:
```python
z = np.around((1 - np.random.rand(T, S)) * 3)
```
这样才能正确生成随机矩阵。