matlab调用cplex验证车辆路径问题的数学模型有效性的代码问题

在关于时间的约束条件中,设置了关于时间的决策变量Tik大于等于0,但在求解完成后,发现该变量的取值仍然会出现负数的情况,还有的取值为极大值,但最终的车辆服务时间的连续性不受影响,求助该怎么解决这个问题?关于时间变量的取值有图片示例:
程序的代码也附上,未经允许代码禁止传播:`clear
clc
tic
%% 小规模数据
qip=[randi([10,20],3,12)]'; %第一种产品需求量
qip(1,:)=0;
qip(end,:)=0;
s=[randi([10,20],1,12)]; %服务时间
s(1)=0;
s(end)=0;
x=[randi([0,100],1,11)]; %横坐标
y=[randi([0,100],1,11)]; %纵坐标
x=[x,x(1)]; %体现出数学模型中的第n+1个节点,也就是配送中心
y=[y,y(1)]; %体现出数学模型中的第n+1个节点,也就是配送中心
%% 配送车辆和顾客数据
axis=[x' y']; %顾客坐标
h=pdist(axis); %计算几何距离
Dij=squareform(h); %距离矩阵
%% 配送车辆和顾客数据
vNum=3; %车辆数量
pNum=3; %产品种类数量
nodeNum=numel(s); %配送网络中总节点数量
C=350; %车辆最大装载量
%% 成本设置及其他参数
c1=50; %车辆固定成本
c2=10; %单位运输成本
c3=2; %产品的单位平均成本
c4=3e-2; %单位碳排放成本
alpha1=2; %运输过程中的单位时间制冷成本,单位为元/小时
alpha2=2; %卸货过程中的单位时间制冷成本,单位为元/小时
beta1=2e-3; %运输过程中的平均货损系数
beta2=1e-3; %卸货过程中的平均货损系数
gamma1=5e-3; %计算油耗系数,其1
gamma2=3e-3; %计算油耗系数,其2
gamma3=1e-3; %计算油耗系数,其3
G=10; %重力系数
E=2; %碳排放因子
v=10; %车辆固定行驶速度
M=1e6; %足够大的常数
qu=5; %基本单元大小
%% 决策变量
Xijk=binvar(nodeNum,nodeNum,vNum,'full'); %0-1变量,i、j节点之间是否由第k辆车进行配送
Yipk=binvar(nodeNum,pNum,vNum,'full'); %0-1变量,i节点的第p种产品是否由第k辆车进行配送
Tik=sdpvar(nodeNum,vNum,'full'); %实数变量,表示车辆k到达i点的时间
Upk=intvar(pNum,vNum,'full'); %整数变量,表示车辆k分配给产品p的基本单元个数
Qijpk=sdpvar(nodeNum,nodeNum,pNum,vNum,'full'); %实数变量,车辆从节点i到节点j的第p类产品的装载量
tol=1e-6; %决策变量精确度
%% 目标函数,总成本最小
%各部分成本初始化
z1=0; %固定成本
z2=0; %运输成本
z3=0; %制冷成本
z4=0; %货损成本
z5=0; %碳排放成本

%固定成本计算
for k=1:vNum
z1=z1+c1*sum(Xijk(1,2:end-1,k));
end

%运输成本计算
for k=1:vNum
for i=1:nodeNum
for j=1:nodeNum
z2=z2+c2Dij(i,j)Xijk(i,j,k);
end
end
end

%制冷成本计算
for k=1:vNum
for i=1:nodeNum
for j=1:nodeNum
z3=z3+alpha1(Dij(i,j)/v)Xijk(i,j,k); %运输过程制冷成本
z3=z3+alpha2s(j)Xijk(i,j,k); %卸货过程制冷成本
end
end
end

%货损成本计算:运输时的货损成本
for k=1:vNum
for i=1:nodeNum
for j=1:nodeNum
for p=1:pNum
%线性化处理
z4=z4+Yipk(i,p,k)qip(i,p)beta1*Tik(i,k);
end
end
end
end

%货损成本计算:卸货时的货损成本
for k=1:vNum
for i=1:nodeNum
for j=1:nodeNum
for p=1:pNum
%线性化
z4=z4+Yipk(i,p,k)Qijpk(i,j,p,k)beta2*s(i);
end
end
end
end

%碳排放成本计算
for k=1:vNum
for i=1:nodeNum
for j=1:nodeNum
Fij=gamma1Dij(i,j)/v+gamma2(sum(Qijpk(i,j,:,k))+G)Dij(i,j)+gamma3Dij(i,j)v^2;
% 计算碳排放量 Eij
Eij=E
Fij;
% 累加碳排放成本
z5=z5+c4EijXijk(i,j,k);
end
end
end

%总目标函数
total_cost=z1+z2+z3+z4+z5;
f=total_cost;
%% 约束条件
F=[];

%变量的下限约束
F=[F;(0<=Qijpk)];
F=[F;(0<=Tik)];
F=[F;Upk>=0]; %添加非负约束
F=[F;Upk<=floor(C/qu)]; %Upk上限

%约束1,每辆车只能从配送中心出发,完成任务后回到配送中心。
for k=1:vNum
F=[F;Xijk(1,1,k)0;sum(Xijk(1,:,k))1];
F=[F;Xijk(nodeNum,nodeNum,k)0;sum(Xijk(:,nodeNum,k))1];
end

%约束2,流量平衡:车辆服务完客户点后,要从该客户点离开。
for j=2:nodeNum-1
for k=1:vNum
F=[F;sum(Xijk(j,:,k))==sum(Xijk(:,j,k))];
end
end

% 约束3,每个需求点的每种产品只能由一辆车满足。
for i=2:nodeNum-1
for p=1:pNum
F=[F;sum(Yipk(i,p,:))==1];
end
end

%约束10,决策变量X和Y的关系。
for i=2:nodeNum
for k=1:vNum
for p=1:pNum
F=[F;sum(Xijk(i,:,k))>=Yipk(i,p,k)];
end
end
end

%约束4,车舱容量约束,车辆k中所有种类的装载量之和不超过车辆最大容量。
for k=1:vNum
F=[F;sum(Upk(:,k)*qu)<=C];
end

%约束5,车辆k分配给产品p的空间不超过最大载重
for k=1:vNum
for p=1:pNum
F=[F;Upk(p,k)*qu<=C];
end
end

%约束6,当车辆k装载的p产品不超过分配给该产品的空间。
for k=1:vNum
for p=1:pNum
F=[F;sum(qip(:,p).Yipk(:,p,k))<=Upk(p,k)qu];
end
end

%约束7,装载量约束:车辆出发时的装载量=访问节点的需求之和。(松弛约束)
for i=2:nodeNum
for p=1:pNum
for k=1:vNum
F=[F;sum(Qijpk(i,:,p,k))<=sum(Yipk(i,p,k)*qip(i,p))];
end
end
end

%约束8,装载流量平衡:车辆在行驶过程中的载重和节点需求递推关系。
for i=2:nodeNum
for p=1:pNum
for k=1:vNum
F=[F;sum(Qijpk(:,i,p,k))==sum(Qijpk(i,:,p,k))+qip(i,p)];
end
end
end

%约束9,时间连续性约束。
for k=1:vNum
F=[F;Tik(1,k)==0];%车辆出发时间为0
for i=1:nodeNum
for j=1:nodeNum
F=[F;Tik(i,k)+s(i)+Dij(i,j)/v-(M*(1-Xijk(i,j,k)))<=Tik(j,k)];
end
end
end

%% 参数配置 'solver','cplex' 'verbose',0,'solver','cplex'
ops=sdpsettings('solver','cplex');
%% 求解问题
sol=solvesdp(F,f,ops);
f=double(f);
Xijk=round(double(Xijk));
Yipk=round(double(Yipk));
Tik=double(Tik);
Upk=double(Upk);
%% 画出配送路线图
plot(axis(2:nodeNum-1,1),axis(2:nodeNum-1,2),'ro');
hold on;
plot(axis(1,1),axis(1,2),'pm');hold on;

%在各个节点上标出对应的节点编号
for i=1:nodeNum
if i~=nodeNum
text(axis(i,1)-0.1,axis(i,2)+0.5,num2str(i-1));
else
text(axis(i,1)-0.1,axis(i,2)-0.5,num2str(i-1));
end
end

%根据Xijk的值,将对应节点连接
color=hsv(vNum);
for i=1:nodeNum
for j=1:nodeNum
for k=1:vNum
if abs(Xijk(i,j,k)-1)<1e-5
plot([axis(i,1),axis(j,1)],[axis(i,2),axis(j,2)],'-','color',color(k,:),'linewidth',1);
title(sprintf('nodeNum: %d', nodeNum));
end
end
end
end
%% 将最终的决策变量Xijk转换为具体的配送方案
VC=cell(vNum,1); %配送方案
used_vehicles=0; %记录使用的车辆数
total_cost=0; %记录车辆总成本

for k=1:vNum
[row,col]=find(abs(Xijk(:,:,k)-1)<tol);
n=numel(row);
route=zeros(1,n+1);
route(1)=0; %起点为配送中心
route(end)=0; %终点为配送中心
for i=1:n
if i1
next_index=find(row
1);
else
next=col(next_index);
next_index=find(row==next);
route(i)=next-1;
end
end

%排除未使用的车辆(路径为0-0)
if numel(route)>2used_vehicles=used_vehicles+1;total_cost=total_cost+c1; %车辆固定成本for i=1:numel(route)-1total_cost=total_cost+Dij(route(i)+1,route(i+1)+1)*c2; %车辆行驶成本end% 显示路径及配送的产品种类disp(['车辆',num2str(k),'的路径如下:']);path_str='0';for i=2:numel(route)-1node=route(i);products=[];for p=1:pNumif Yipk(node+1,p,k)==1products=[products,p];endendpath_str=[path_str,'-',num2str(node),'(',num2str(products),')'];endpath_str=[path_str,'-0'];disp(path_str);end

end

%输出目标函数值
disp(['使用的车辆数为:',num2str(used_vehicles)]);

%输出每辆车的车舱空间分配情况
Upk_value=Upk*qu;
Upk_value=double(Upk_value);
% 输出每辆车的车舱空间分配情况
for k=1:vNum
%检查车辆k是否被使用
[row,col]=find(abs(Xijk(:,:,k)-1)<tol);
if isempty(row)||(numel(row)1&&row(1)1&&col(1)==nodeNum)
%如果车辆k未被使用(路径为0-0),跳过该车辆
continue;
end

%获取车辆k的分配情况
allocation=round(Upk(:,k)*qu); %车辆k分配给每种产品的空间,计算为 Upk * qu%计算车辆k的实际装载量
actual_load=0;
for i=2:nodeNum-1for p=1:pNumif Yipk(i,p,k)==1actual_load=actual_load+qip(i,p);endend
end% 计算装载率
load_rate=actual_load/C;% 输出车辆k的分配情况
fprintf('车辆%d的分配情况为:',k);
for p=1:pNumfprintf('%d ',allocation(p));
end
fprintf('\n');% 输出车辆k的实际装载量和装载率
fprintf('车辆%d的实际装载量: %.2f\n',k,actual_load);
fprintf('车辆%d的装载率: %.2f%%\n',k,load_rate * 100);

end

% 计算每种成本的值
z1 = double(z1);
z2 = double(z2);
z3 = double(z3);
z4 = double(z4);
z5 = double(z5);

% 输出结果
fprintf('总成本: %.2f\n', double(f));
fprintf('固定成本: %.2f\n', z1);
fprintf('运输成本: %.2f\n', z2);
fprintf('制冷成本: %.2f\n', z3);
fprintf('货损成本: %.2f\n', z4);
fprintf('碳排放成本: %.2f\n', z5);
toc`

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/894598.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯出品!这款Markdown神器让你码字效率翻倍,双模式编辑太香了!

由腾讯开源的CherryMarkdown编辑器,集思维导图式大纲写作与专业分屏模式于一身,支持实时预览、流程图绘制、多主题切换等硬核功能,助你轻松驾驭技术文档、博客写作、会议纪要等多种场景!嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学…

AI 在 Java Web 开发中的变革性应用:重塑开发未来

1. 智能代码生成与优化:开启高效开发的新纪元 在传统的 Java Web 开发中,编写基础代码往往占据了大量的时间和精力,尤其是重复性的模板代码。然而,AI 的出现彻底改变了这一现状。通过自然语言处理(NLP)技术,AI 能够理解开发者的自然语言描述,并自动生成高质量的基础代码…

20242931 2024-2025-2 《网络攻防实践》第一周作业

20242931 2024-2025-2 《网络攻防实践》第一周作业 1. 知识点梳理与总结 1.1 攻击机、靶机、SEED虚拟机、蜜网网关和蜜罐技术简介攻击机(Attacker Machine):攻击机是攻击者的操作平台,用于模拟各种网络攻击行为,测试靶机的安全性,并验证攻击技术的有效性。它是网络攻防实…

通达信打造个性化的文本标记系统

通达信的指标体系以数字为主,文本字符串的可行操作很少。 之前,尝试了无数方法,终于通过DLL,可以把通达信的文字传入到DLL中。 通达信如何向dll传递字符串​mp.weixin.qq.com/s?__biz=MzIxNzUyNTI4MA==&mid=2247483755&idx=1&sn=eb187f4f04c92c08fd45bd7f970b…

【VMware by Broadcom】VMware 产品套件(2025)

VMware 被 Broadcom 收购后(现为 VMware by Broadcom),重新调整了其产品部门并最终优化为了四个,分别是:VMware Cloud Foundation(VCF)部门、Application & Network Security(ANS)部门、VMware Tanzu 部门以及 VeloCloud 部门。VMware Cloud Foundation(VCF)部门…

变量命名不规范我被deepseek骗了

首先是一个实体类@Data public class Dto {private String mNumber; } 前端传来{"mNumber:"123"}为null的情况 编译之后我们看看class文件:getMNumberpublic class Dto {private String mNumber;public Dto() {}public String getMNumber() {return this.mNum…

GPT-4.5 感觉有点拉胯,但其实是 OpenAI 迄今为止最大的一步赌注

Alberto RomeroI. GPT-4.5 就是起跳前的助跑那一步 OpenAI 推出了 GPT-4.5(官方博客、系统卡片、演示视频),这是他们最新也是目前最大的一款 AI 模型。他们其实一年多前就开始放风,说它叫 Orion,结果很多人还以为是 GPT-5。现在终于来了……但感觉吧,有点拉胯。至少看起来…

GPT 4.5 可能是戳破 AI 泡沫的模型

GPT 4.5 可能是戳破 AI 泡沫的模型 Andrew Zuo本文点评:在AI技术狂飙突进的同时,也有许多声音包括本文的作者在内都认为AI行业正陷入巨大泡沫,技术突破逐渐停滞,高昂的硬件成本与资本退潮或将引爆寒冬。然而,这些观点大多忽视了技术的本质价值,真正值得关注的并非模型参数…

前端静态页面放在oss上cdn上的配置

0. 这次改造的原因问题1:前端发布的过程中由于使用了单pod,发布完pod在启动的时候服务对外不可用问题2:如果用滚动更新可能会带来的问题 发布过程中,机器A发布完了,机器B没有发布完。 用户访问一个页面,页面请求打在 A上,然后js资源打在B上,B上没有然后就命中了404逻辑…

Nginx 工作机制参数设置(详细讲解说明)

1. Nginx 当中的 master-worker 机制原理 master-worker 工作原理图:一个 master 管理多个 worker[root@localhost ~]# cd /usr/local/nginx/ [root@localhost nginx]# ls auto CHANGES.ru conf contrib html logs man proxy_temp sbin …

无钥匙进入系统和无钥匙启动系统PEPS

经纬恒润的无钥匙进入及启动系统简称 PEPS (Passive Entry Passive Start) 系统,采用 RFID(无线射频识别)技术,实现无需按动遥控器即可进入车内以及一键启动发动机等功能。 经纬恒润的无钥匙进入及启动系统简称 PEPS (Passive Entry Passive Start) 系统,采用 RFID(无…

阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!

3月6日最新消息,阿里云通义千问官方宣布推出最新推理模型 QwQ-32B,这一模型仅有 32B 参数,但在效果上与拥有 671B 参数的 DeepSeek-R1 相媲美。如果你自己部署 DeepSeek-R1 但资源不够的话,又多了一个新的选择。 QwQ-32B 的独特之处不仅在于其参数规模和效果表现,还集成了…