gurobi中的分段线性约束model.addGenConstrPWL小例子

分段点取 (0,1.5)、(1,0)、(2,3),在matlab中画出相应的分段函数

% 定义分段点
x_points = [0, 1, 2];
y_points = [1.5, 0, 3];

% 绘制分段线性函数
figure;
hold on;

% 第一段线性函数
x1 = linspace(x_points(1), x_points(2), 100);
y1 = interp1(x_points(1:2), y_points(1:2), x1, 'linear');   % 在(0,1.5)和(1,0)之间进行线性插值
plot(x1, y1, 'b', 'LineWidth', 2);

% 第二段线性函数
x2 = linspace(x_points(2), x_points(3), 100);
y2 = interp1(x_points(2:3), y_points(2:3), x2, 'linear');
plot(x2, y2, 'r', 'LineWidth', 2);

% 绘制分段点
scatter(x_points, y_points, 100, 'k', 'filled');

% 设置图形属性
xlabel('x');
ylabel('y');
title('Piecewise Linear Function');
legend('Segment 1', 'Segment 2', 'Segment Points', 'Location', 'best');
grid on;
hold off;

在python中添加相应的约束进行优化

import gurobipy as gp

# 创建一个 Gurobi 模型对象
model = gp.Model()

# 创建变量
x = model.addVar(name="x")
y = model.addVar(name="y")

# 添加分段线性约束
model.addGenConstrPWL(x, y, [0, 1, 2], [1.5, 0, 3])
# 分段点:(0,1.5)、(1,0)、(2,3)

# 添加变量的下界约束
lower_bound_constraint = model.addConstr(x >= 0, name="lower_bound_constraint")
# 添加变量的上界约束
upper_bound_constraint = model.addConstr(x <= 2, name="upper_bound_constraint")

# 设置优化目标
model.setObjective(y, gp.GRB.MINIMIZE)    # 改为gp.GRB.MAXIMIZE尝试一下吧

# 解决优化问题
model.optimize()

# 打印结果
if model.status == gp.GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"x = {x.x}")
    print(f"y = {y.x}")
else:
    print("Optimal solution not found.")

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值