求解大规模单仓库多旅行商问题(LS-SDMTSP)的成长优化算法(Growth Optimizer,GO),MATLAB代码

一、问题定义

大规模单仓库多旅行商问题(Large-Scale Single-Depot Multi-Traveling Salesman Problem,简称 LS-SDMTSP)是组合优化领域中极具挑战性的经典问题。假设存在一个单一仓库,它既是所有旅行商的出发地,也是最终的返回地。同时,有数量众多的客户节点散布在地理空间中,并且有一支由多个旅行商组成的队伍。每个旅行商需要从仓库出发,遍历一定数量的客户节点,然后返回仓库。在这个过程中,需要达成两个关键目标:其一,必须确保所有客户节点都能被至少一个旅行商访问到;其二,通常以最小化所有旅行商的总行程距离为主要优化目标。当然,在实际应用场景中,根据具体需求,也可能将最小化总时间、总成本等其他指标作为优化方向。例如,在物流配送场景下,成本不仅包括运输里程产生的燃油费,还可能涉及车辆损耗、人力成本等,此时就需要综合考虑这些因素来确定优化目标。

二、问题特点

规模大:该问题涉及大量的客户节点和多个旅行商,随着节点数量和旅行商数量的增加,计算复杂度呈指数级增长。举例来说,当客户节点从 10 个增加到 20 个时,可能的路径组合数量会急剧增加,求解难度大幅提升。这种规模的增长使得传统的简单算法难以在合理时间内处理如此庞大的数据量。
组合复杂性:需要对客户节点进行分组,并为每个旅行商规划路径,这导致存在海量的可能组合。从数学角度来看,假设存在 n 个客户节点和 m 个旅行商,仅考虑客户节点的分组方式,其组合数量就非常巨大,更不用说还要为每个分组规划具体的旅行路线。在如此庞大的解空间中找到最优解,如同在浩瀚星空中寻找特定的星星,难度极高。
约束条件多:
容量限制:每个旅行商都存在容量限制,例如配送车辆有载重上限,或者快递员一次能够携带的包裹数量有限。如果超过这个容量限制,就无法满足实际需求。
时间窗约束:客户只能在特定时间段内接受服务。比如,某些生鲜配送客户要求在上午 10 点到 12 点之间送达货物,这就限制了旅行商的路线规划和时间安排。
路径连通性约束:旅行商必须按照合理的顺序依次访问各个客户节点,路径必须是连通的,不能出现孤立的节点或者无法到达的路径。

三、应用场景

物流配送:物流企业从仓库出发,安排多个配送车辆(旅行商)向多个客户点送货。合理规划路线可以显著降低运输成本,提高配送效率。例如,某大型物流企业每天要向成百上千个客户配送货物,通过优化多旅行商问题的路线规划,能够减少车辆行驶里程,降低燃油消耗和人力成本,同时提高货物送达的及时性。
快递服务:快递分拨中心作为仓库,快递员作为旅行商,需要将包裹派送到各个收件地址。优化路线能减少快递员的工作时间和行程,提高快递服务的质量和效率。以某知名快递公司为例,在大城市中每天有大量的快递需要派送,通过科学的路线规划,快递员可以在更短的时间内完成更多的派送任务,提升客户满意度。
移动机器人路径规划:在大型工厂或仓库中,多个移动机器人需要从一个充电点(仓库)出发,完成对不同区域的货物搬运、巡检等任务。通过解决多旅行商问题可以为机器人规划高效的路径,提高生产自动化水平和效率。比如,在自动化仓储物流中心,移动机器人需要在复杂的货架之间穿梭搬运货物,合理的路径规划可以避免机器人之间的碰撞,提高货物搬运的效率。
资源分配与调度:在电力维修、网络维护等领域,从一个基地派出多个维修团队(旅行商)到不同的故障点(客户节点)进行维修作业。合理安排路线可以快速响应故障,减少维修时间和成本。例如,当出现大面积停电故障时,电力维修部门需要派出多个维修团队前往不同的故障区域,通过优化路线规划,能够使维修团队更快地到达现场,缩短停电时间,减少对居民和企业的影响。

四、常用求解方法

精确算法:
分支定界法:通过不断地将问题分解为更小的子问题,并对每个子问题的解空间进行界定,逐步缩小搜索范围,最终找到最优解。但对于大规模问题,由于子问题数量过多,计算量会变得极其庞大,往往在实际应用中难以在合理时间内完成求解。
动态规划法:将问题分解为一系列相互关联的子问题,通过求解子问题并保存结果,避免重复计算,从而得到原问题的最优解。然而,对于大规模单仓库多旅行商问题,由于状态空间过大,动态规划法的计算时间和空间复杂度都非常高,限制了其应用。
启发式算法:
遗传算法:模拟生物进化过程,通过选择、交叉、变异等操作对种群进行迭代,逐步搜索到较优解。在遗传算法中,每个可能的解被看作是一个个体,通过适应度函数评估个体的优劣,选择适应度高的个体进行交叉和变异,产生新的一代个体。它具有较强的全局搜索能力,但在搜索过程中可能会出现早熟收敛的问题,即过早地陷入局部最优解,无法找到全局最优解。
粒子群算法:将每个解看作是搜索空间中的一个粒子,粒子通过自身的经验和群体中其他粒子的经验来更新自己的位置和速度,从而寻找最优解。粒子群算法具有收敛速度快、易于实现等优点,但在处理复杂问题时,由于粒子容易陷入局部最优区域,可能导致无法找到全局最优解。
蚁群算法:模拟蚂蚁觅食过程中通过信息素进行路径选择的行为。蚂蚁在搜索过程中会根据信息素浓度选择路径,信息素浓度高的路径被选择的概率大。随着时间的推移,蚂蚁会逐渐找到较优路径,同时信息素也会在较优路径上不断积累,进一步引导后续蚂蚁选择该路径。然而,蚁群算法在初期搜索速度较慢,且容易受到参数设置的影响。
混合算法:将精确算法与启发式算法相结合,或者将多种启发式算法进行融合,以充分发挥各种算法的优势,提高求解质量和效率。例如,先使用启发式算法快速找到一个较优的初始解,然后利用精确算法对该解进行局部优化,从而在保证求解质量的同时,提高求解速度。或者将遗传算法和粒子群算法结合,利用遗传算法的全局搜索能力和粒子群算法的局部搜索能力,相互补充,提高算法的性能。

五、案例分析

以某电商物流企业为例,该企业在一个城市设有一个大型仓库,每天需要向周边地区的数千个客户配送货物。在采用大规模单仓库多旅行商问题的优化算法之前,物流配送成本较高,配送时间较长,客户满意度较低。通过引入先进的启发式算法,对配送路线进行优化,将配送车辆合理分组,并为每组车辆规划最优路线。经过一段时间的运行,物流配送成本降低了 15%,配送时间平均缩短了 20%,客户满意度显著提高。这充分展示了大规模单仓库多旅行商问题的实际应用价值和优化算法的有效性。

七、成长优化算法

成长优化算法(Growth Optimizer,GO)由Qingke Zhang等人于2023年提出,该算法的设计灵感来源于个人在成长过程中的学习和反思机制。学习是个人通过从外部世界获取知识而成长的过程,反思是检查个体自身不足,调整个体学习策略,帮助个体成长的过程。

参考文献:

[1]Qingke Zhang, Hao Gao, Zhi-Hui Zhan, Junqing Li, Huaxiang Zhang,Growth Optimizer: A powerful metaheuristic algorithm for solving continuous and discrete global optimization problems,Knowledge-Based Systems,261,2023

八、成长优化算法求解LS-SDMTSP

figure
bar(path_length)
ylabel('路径长度')
set(gca,'xtick',1:1:m);
set(gca,'XTickLabel',salemans)
title(Name)
figure
semilogy(CurveLine,'LineWidth',2);
xlabel('迭代次数')
ylabel('总路径长度')
legend('GO')
title(Name)



%% 显示结果
fprintf('数据集:%s\n',Name)
for j=1:length(saleman_path)
    Kd=saleman_path{j};
    fprintf('算法得到的路径%d:\n',j)
    fprintf('具体路径信息:%d',Kd(1))
    for i=2:length(Kd)
        fprintf(' > %d',Kd(i));
    end
     fprintf(' 路径长度%f:\n',path_length(j))
   
end
fprintf('算法求解得到的总路径长度:%f\n',sum(path_length));

对于数据集:a280
在这里插入图片描述
在这里插入图片描述

算法得到的路径1:
具体路径信息:150 > 146 > 143 > 144 > 200 > 201 > 202 > 203 > 221 > 195 > 196 > 197 > 198 > 199 > 145 > 150 路径长度257.000000:
算法得到的路径2:
具体路径信息:150 > 142 > 204 > 213 > 216 > 215 > 218 > 225 > 224 > 223 > 222 > 219 > 220 > 217 > 147 > 150 路径长度287.000000:
算法得到的路径3:
具体路径信息:150 > 148 > 205 > 212 > 214 > 226 > 227 > 234 > 235 > 233 > 228 > 211 > 207 > 141 > 149 > 150 路径长度294.000000:
算法得到的路径4:
具体路径信息:150 > 139 > 140 > 208 > 209 > 230 > 231 > 239 > 238 > 237 > 236 > 232 > 229 > 210 > 206 > 150 路径长度304.000000:
算法得到的路径5:
具体路径信息:150 > 253 > 252 > 251 > 246 > 245 > 240 > 241 > 242 > 244 > 247 > 250 > 249 > 255 > 254 > 150 路径长度310.000000:
算法得到的路径6:
具体路径信息:150 > 138 > 264 > 258 > 278 > 279 > 3 > 280 > 2 > 243 > 248 > 256 > 257 > 265 > 266 > 150 路径长度308.000000:
算法得到的路径7:
具体路径信息:150 > 268 > 262 > 261 > 276 > 6 > 5 > 1 > 4 > 277 > 260 > 259 > 263 > 267 > 137 > 150 路径长度331.000000:
算法得到的路径8:
具体路径信息:150 > 135 > 270 > 271 > 11 > 10 > 8 > 7 > 9 > 275 > 274 > 273 > 272 > 269 > 136 > 150 路径长度263.000000:
算法得到的路径9:
具体路径信息:150 > 132 > 19 > 25 > 23 > 24 > 14 > 13 > 12 > 15 > 16 > 17 > 18 > 133 > 134 > 150 路径长度255.000000:
算法得到的路径10:
具体路径信息:150 > 131 > 130 > 21 > 20 > 22 > 26 > 27 > 28 > 32 > 29 > 127 > 128 > 129 > 150 路径长度246.000000:
算法得到的路径11:
具体路径信息:150 > 153 > 123 > 124 > 125 > 34 > 35 > 37 > 36 > 33 > 31 > 30 > 126 > 154 > 155 > 150 路径长度277.000000:
算法得到的路径12:
具体路径信息:150 > 122 > 40 > 39 > 38 > 49 > 50 > 51 > 52 > 53 > 48 > 47 > 41 > 121 > 156 > 150 路径长度315.000000:
算法得到的路径13:
具体路径信息:150 > 152 > 119 > 60 > 59 > 44 > 57 > 56 > 55 > 54 > 46 > 45 > 43 > 42 > 120 > 150 路径长度299.000000:
算法得到的路径14:
具体路径信息:150 > 61 > 58 > 68 > 69 > 70 > 67 > 66 > 65 > 64 > 63 > 62 > 118 > 117 > 157 > 150 路径长度314.000000:
算法得到的路径15:
具体路径信息:150 > 158 > 114 > 113 > 87 > 84 > 74 > 73 > 72 > 71 > 85 > 86 > 116 > 115 > 151 > 150 路径长度307.000000:
算法得到的路径16:
具体路径信息:150 > 178 > 159 > 110 > 89 > 81 > 78 > 77 > 75 > 76 > 82 > 83 > 88 > 112 > 111 > 150 路径长度312.000000:
算法得到的路径17:
具体路径信息:150 > 160 > 107 > 104 > 91 > 93 > 94 > 96 > 95 > 79 > 80 > 90 > 109 > 108 > 177 > 150 路径长度317.000000:
算法得到的路径18:
具体路径信息:150 > 176 > 175 > 169 > 101 > 99 > 98 > 97 > 92 > 102 > 103 > 105 > 106 > 173 > 174 > 150 路径长度299.000000:
算法得到的路径19:
具体路径信息:150 > 181 > 161 > 162 > 172 > 171 > 170 > 100 > 168 > 167 > 166 > 164 > 163 > 182 > 180 > 150 路径长度257.000000:
算法得到的路径20:
具体路径信息:150 > 193 > 194 > 192 > 191 > 190 > 189 > 188 > 165 > 187 > 186 > 185 > 184 > 183 > 179 > 150 路径长度256.000000:
算法求解得到的总路径长度:5808.000000

对于数据集:tsp225
在这里插入图片描述
在这里插入图片描述

算法得到的路径1:
具体路径信息:69 > 207 > 49 > 133 > 191 > 205 > 189 > 190 > 225 > 47 > 2 > 59 > 58 > 69 路径长度284.000000:
算法得到的路径2:
具体路径信息:69 > 56 > 57 > 51 > 199 > 224 > 192 > 196 > 193 > 218 > 48 > 50 > 55 > 69 路径长度318.000000:
算法得到的路径3:
具体路径信息:69 > 54 > 44 > 43 > 4 > 200 > 198 > 197 > 195 > 194 > 46 > 45 > 52 > 69 路径长度565.000000:
算法得到的路径4:
具体路径信息:69 > 53 > 42 > 6 > 3 > 1 > 5 > 7 > 8 > 9 > 40 > 41 > 70 > 69 路径长度589.000000:
算法得到的路径5:
具体路径信息:69 > 39 > 10 > 18 > 19 > 203 > 20 > 17 > 16 > 12 > 11 > 38 > 74 > 69 路径长度562.000000:
算法得到的路径6:
具体路径信息:69 > 72 > 76 > 36 > 23 > 22 > 21 > 15 > 14 > 13 > 37 > 32 > 69 路径长度548.000000:
算法得到的路径7:
具体路径信息:69 > 71 > 75 > 31 > 33 > 24 > 208 > 25 > 34 > 35 > 206 > 73 > 69 路径长度395.000000:
算法得到的路径8:
具体路径信息:69 > 98 > 77 > 28 > 204 > 26 > 29 > 30 > 202 > 217 > 219 > 216 > 69 路径长度333.000000:
算法得到的路径9:
具体路径信息:69 > 100 > 97 > 78 > 79 > 80 > 81 > 221 > 209 > 95 > 96 > 99 > 69 路径长度298.000000:
算法得到的路径10:
具体路径信息:69 > 91 > 92 > 84 > 85 > 82 > 83 > 94 > 93 > 101 > 102 > 69 路径长度260.000000:
算法得到的路径11:
具体路径信息:69 > 90 > 210 > 86 > 131 > 211 > 132 > 222 > 130 > 87 > 89 > 103 > 69 路径长度347.000000:
算法得到的路径12:
具体路径信息:69 > 104 > 88 > 129 > 215 > 134 > 135 > 183 > 213 > 164 > 128 > 220 > 69 路径长度437.000000:
算法得到的路径13:
具体路径信息:69 > 105 > 127 > 166 > 162 > 137 > 138 > 139 > 136 > 163 > 158 > 165 > 69 路径长度496.000000:
算法得到的路径14:
具体路径信息:69 > 126 > 167 > 156 > 157 > 201 > 142 > 140 > 141 > 159 > 161 > 160 > 69 路径长度531.000000:
算法得到的路径15:
具体路径信息:69 > 106 > 214 > 151 > 154 > 155 > 144 > 143 > 146 > 153 > 152 > 107 > 69 路径长度467.000000:
算法得到的路径16:
具体路径信息:69 > 108 > 109 > 125 > 212 > 150 > 149 > 148 > 145 > 147 > 168 > 169 > 69 路径长度455.000000:
算法得到的路径17:
具体路径信息:69 > 124 > 170 > 176 > 177 > 178 > 179 > 174 > 172 > 123 > 110 > 67 > 69 路径长度522.000000:
算法得到的路径18:
具体路径信息:69 > 66 > 112 > 121 > 182 > 181 > 180 > 173 > 171 > 122 > 111 > 65 > 69 路径长度431.000000:
算法得到的路径19:
具体路径信息:69 > 64 > 113 > 175 > 120 > 184 > 185 > 186 > 119 > 115 > 114 > 63 > 69 路径长度317.000000:
算法得到的路径20:
具体路径信息:69 > 62 > 116 > 223 > 118 > 187 > 117 > 188 > 27 > 60 > 61 > 68 > 69 路径长度295.000000:
算法求解得到的总路径长度:8450.000000

九、完整MATLAB见下方名片

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

安装和卸载RabbitMQ

我的飞书:https://rvg7rs2jk1g.feishu.cn/docx/SUWXdDb0UoCV86xP6b3c7qtMn6b 使用Ubuntu环境进行安装 一、安装Erlang 在安装RabbitMQ之前,我们需要先安装Erlang,RabbitMQ需要Erlang的语言支持 #安装Erlang sudo apt-get install erlang 在安装的过程中,会弹出一段信息,此…

使用线性回归模型逼近目标模型 | PyTorch 深度学习实战

前一篇文章,计算图 Compute Graph 和自动求导 Autograd | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 使用线性回归模型逼近目标模型 什么是回归什么是线性回归使用 PyTorch 实现线性回归模型代码执行结…

使用Pygame制作“Flappy Bird”游戏

1. 前言 Flappy Bird 是一款“点击上浮、松手下落”的横向卷轴游戏: 场景中持续出现上下成对的管道,玩家需要让小鸟在管道之间穿行;每穿过一对管道记 1 分;若小鸟碰到管道或掉到地面,则游戏结束;一旦上手…

BUUCTF_XSS-Lab

xss XSS(Cross - Site Scripting)即跨站脚本攻击,是一种常见的 Web 安全漏洞。攻击者通过在目标网站注入恶意脚本(通常是 JavaScript),当其他用户访问该网站时,这些恶意脚本会在用户的浏览器中执…

【Windows 开发NVIDIA相关组件】CUDA、cuDNN、TensorRT

目录 1. 安装 CUDA Toolkit 2. 安装 cuDNN 3. 安装 Zlib 4. 安装 TensorRT 5. 安装 TensorRT Python 包[c++项目不需要] 6. 安装 ONNX GraphSurgeon 包[c++项目不需要] 1. 安装 CUDA Toolkit 从 CUDA ToolkitArchive 下载对应版本的离线安装包,以 11.7 版本为例。 打开安…

红包雨项目前端部分

创建项目 pnpm i -g vue/cli vue create red_pakage pnpm i sass sass-locader -D pnpm i --save normalize.css pnpm i --save-dev postcss-px-to-viewportpnpm i vantlatest-v2 -S pnpm i babel-plugin-import -Dhttps://vant.pro/vant/v2/#/zh-CN/<van-button click&…

源路由 | 源路由网桥 / 生成树网桥

注&#xff1a;本文为 “源路由” 相关文章合辑。 未整理去重。 什么是源路由&#xff08;source routing&#xff09;&#xff1f; yzx99 于 2021-02-23 09:45:51 发布 考虑到一个网络节点 A 从路由器 R1 出发&#xff0c;可以经过两台路由器 R2、R3&#xff0c;到达相同的…

【React】合成事件语法

React 合成事件是 React 为了处理浏览器之间的事件差异而提供的一种跨浏览器的事件系统。它封装了原生的 DOM 事件&#xff0c;提供了一致的事件处理机制。 合成事件与原生事件的区别&#xff1a; 合成事件是 React 自己实现的&#xff0c;封装了原生事件。合成事件依然可以通…

一文解释nn、nn.Module与nn.functional的用法与区别

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;零基础入门PyTorch框架_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 …

TongSearch3.0.4.0安装和使用指引(by lqw)

文章目录 安装准备手册说明支持的数据类型安装控制台安装单节点(如需集群请跳过这一节)解压和启动开启X-Pack Security和生成p12证书&#xff08;之后配置内置密码和ssl要用到&#xff09;配置内置用户密码配置ssl&#xff08;先配置内置用户密码再配ssl&#xff09;配置控制台…

2025年Android NDK超全版本下载地址

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

CSS outline详解:轮廓属性的详细介绍

什么是outline&#xff1f; outline&#xff08;轮廓&#xff09;是CSS中一个有趣的属性&#xff0c;它在元素边框&#xff08;border&#xff09;的外围绘制一条线。与border不同的是&#xff0c;outline不占用空间&#xff0c;不会影响元素的尺寸和位置。这个特性使它在某些…

蓝桥杯之c++入门(六)【string(practice)】

目录 练习1&#xff1a;标题统计方法1&#xff1a;一次性读取整行字符&#xff0c;然后统计方法2&#xff1a;按照单词读取小提示&#xff1a; 练习2&#xff1a;石头剪子布练习3&#xff1a;密码翻译练习4&#xff1a;文字处理软件练习5&#xff1a;单词的长度练习6&#xff1…

Windows编程:下载与安装 Visual Studio 2010

本节前言 在写作本节的时候&#xff0c;本来呢&#xff0c;我正在写的专栏&#xff0c;是 MFC 专栏。而 VS2010 和 VS2019&#xff0c;正是 MFC 学习与开发中&#xff0c;可以使用的两款软件。然而呢&#xff0c;如果你去学习 Windows API 知识的话&#xff0c;那么&#xff0…

基于ansible部署elk集群

ansible部署 ELK部署 ELK常见架构 &#xff08;1&#xff09;ElasticsearchLogstashKibana&#xff1a;这种架构是最常见的一种&#xff0c;也是最简单的一种架构&#xff0c;这种架构通过Logstash收集日志&#xff0c;运用Elasticsearch分析日志&#xff0c;最后通过Kibana中…

(苍穹外卖)项目结构

苍穹外卖项目结构 后端工程基于 maven 进行项目构建&#xff0c;并且进行分模块开发。 1). 用 IDEA 打开初始工程&#xff0c;了解项目的整体结构&#xff1a; 对工程的每个模块作用说明&#xff1a; 序号名称说明1sky-take-outmaven父工程&#xff0c;统一管理依赖版本&…

达梦数据库从单主模式转换为主备模式

目录标题 达梦数据库单主转主备配置笔记前期准备服务器环境数据库安装磁盘空间 流程流程图说明基于脱机备份方式的单实例转主备流程图详细步骤说明 详细步骤1. 检查主库归档模式2. 配置主库配置文件dm.ini 文件dmmal.ini 文件dmarch.ini 文件 3. 备份主库数据库4. 备库配置新建…

计算机毕业设计hadoop+spark+hive民宿推荐系统 酒店推荐系统 民宿价格预测 酒店价预测 机器学习 深度学习 Python爬虫 HDFS集群

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

接口对象封装思想及实现-笔记

目录 接口对象封装代码分层思想 封装案例封装Tpshop商城登录Tpshop商城登录参数化 接口自动化测试框架 接口对象封装 代码分层思想 分层思想&#xff1a;将普通思想分为两层&#xff0c;分为接口对象层和测试脚本层 接口对象层&#xff1a; 对接口进行封装&#xff0c;封装好之…

【LeetCode】5. 贪心算法:买卖股票时机

太久没更了&#xff0c;抽空学习下。 看一道简单题。 class Solution:def maxProfit(self, prices: List[int]) -> int:cost -1profit 0for i in prices:if cost -1:cost icontinueprofit_ i - costif profit_ > profit:profit profit_if cost > i:cost iret…