分段点取 (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.")