dp经典问题:装配线调度

dp经典问题:装配线调度

装配线调度问题(Assembly Line Scheduling Problem) 是一个经典的动态规划问题。这个问题的目标是通过在两条装配线上调度任务,来最小化完成整个装配过程所需的总时间。


问题描述

假设有两条装配线,每条装配线上有𝑛个工作站。每个工作站都需要一定的时间来处理其任务:

a 1 [ i ] ← 第一条装配线处理第 i 个任务所需要的时间 a_1[i] \gets 第一条装配线处理第 i 个任务所需要的时间 a1[i]第一条装配线处理第i个任务所需要的时间
a 2 [ i ] ← 第二条装配线处理第 i 个任务所需要的时间 a_2[i] \gets 第二条装配线处理第 i 个任务所需要的时间 a2[i]第二条装配线处理第i个任务所需要的时间

此外,从一个装配线切换到另一装配线是需要时间的

t 1 [ i ] ← 装配线 1 切换到装配线 2 并到达第 i 个工作站的时间。 t_1[i] \gets 装配线 1 切换到装配线 2 并到达第 i 个工作站的时间。 t1[i]装配线1切换到装配线2并到达第i个工作站的时间。
t 2 [ i ] ← 装配线 2 切换到装配线 1 并到达第 i 个工作站的时间。 t_2[i] \gets 装配线 2 切换到装配线 1 并到达第 i 个工作站的时间。 t2[i]装配线2切换到装配线1并到达第i个工作站的时间。

最初进入装配线的时间

e 1 ← 表示进入装配线 1 的时间。 e_1 \gets 表示进入装配线 1 的时间。 e1表示进入装配线1的时间。

e 2 ← 表示进入装配线 2 的时间。 e_2 \gets 表示进入装配线 2 的时间。 e2表示进入装配线2的时间。

离开装配线的时间

x 1 ← 表示离开装配线 1 的时间 x_1 \gets 表示离开装配线1的时间 x1表示离开装配线1的时间

x 2 ← 表示离开装配线 2 的时间 x_2 \gets 表示离开装配线2的时间 x2表示离开装配线2的时间

问题分析

Step1:识别状态

T i [ j ] ← 到达第 i 条装配线上第 j 个工作站的最短时间 T_i[j] \gets 到达第 i 条装配线上第j个工作站的最短时间 Ti[j]到达第i条装配线上第j个工作站的最短时间

Step2:给出边界条件

最初进入装配线的时间为
T 1 [ 0 ] = e 1 + a 1 [ 0 ] T_1[0] = e_1+a_1[0] T1[0]=e1+a1[0]
T 2 [ 0 ] = e 2 + a 2 [ 0 ] T_2[0] = e_2+a_2[0] T2[0]=e2+a2[0]

Step3:写出状态转移方程

为了从一个工作站转移到下一个工作站,我们有两种选择:继续在当前装配线上,或者切换到另一条装配线。每次都是从最优子问题解的状态转移到当前状态,具体的状态转移方程如下:

T 1 [ i ] = m i n ( T 1 [ i − 1 ] + a 1 [ i ] , T 2 [ i − 1 ] + a 1 [ i ] + t 2 [ i ] ) T_1[i] = min(T1[i-1]+a_1[i],T2[i-1]+a_1[i]+t_2[i]) T1[i]=min(T1[i1]+a1[i],T2[i1]+a1[i]+t2[i])
T 2 [ i ] = m i n ( T 2 [ i − 1 ] + a 2 [ i ] , T 1 [ i − 1 ] + a 2 [ i ] + t 1 [ i ] ) T_2[i] = min(T2[i-1]+a_2[i],T1[i-1]+a_2[i]+t_1[i]) T2[i]=min(T2[i1]+a2[i],T1[i1]+a2[i]+t1[i])

Step3:递推最终状态

从进入装配线开始进行递推,每一次的状态都是最优子问题解,最终构成了最优结构。

T n = m i n ( T 1 [ n − 1 ] + x 1 , T 2 [ n − 1 ] + x 2 ) T_n=min(T_1[n-1]+x1,T_2[n-1]+x2) Tn=min(T1[n1]+x1,T2[n1]+x2)

#include<iostream>
#include<vector>using namespace std;int assembly(vector<int>&a1,vector<int>&a2,vector<int>&t1,vector<int>&t2,int e1,int e2,int x1,int x2,int n){vector<int>T1(n);vector<int>T2(n);T1[0]=e1+a1[0];T2[0]=e2+a2[0];for(int i=1;i<n;i++){T1[i]=min(T1[i-1]+a1[i],T2[i-1]+a2[i]+t2[i]);T2[i]=min(T2[i-1]+a2[i],T1[i-1]+a1[i]+t1[i]);}return min(T1[n-1]+x1,T2[n-1]+x2);
}int main() {vector<int> a1 = {4, 5, 3, 2};vector<int> a2 = {2, 10, 1, 4};vector<int> t1 = {0, 7, 4, 5};vector<int> t2 = {0, 9, 2, 8};int e1 = 10, e2 = 12, x1 = 18, x2 = 7;int n = a1.size();cout << "Minimum cost: " << assembly(a1, a2, t1, t2, e1, e2, x1, x2, n) << endl;return 0;
}

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

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

相关文章

天马学航——智慧教务系统(移动端)开发日志八

天马学航——智慧教务系统(移动端)开发日志八 日志摘要&#xff1a;完成了对用户主界面的优化&#xff0c;再次优化数据库缓存&#xff0c;使数据库读写分离 优化主界面 优化用户界面&#xff0c;使界面看起来更加亲切贴合 主要源码 build() {Row() {Column({space:30}) {Te…

调试器接口是什么?

目录 一、调试器接口 1.1 什么是下载调试器&#xff1f; 1.2 JTAG标准/协议 1.3 SWD标准 一、调试器接口 1.1 什么是下载调试器&#xff1f; 简单来讲&#xff0c;它就是一种能把PC端发送的命令&#xff08;通过USB协议&#xff09;转换为MCU能理解的语言&#xff08;SWD协…

# [0622] Task02 model-free 免模型类 RL 算法的预测和控制 【ε 贪心策略 优化的证明】

easy-rl PDF版本 笔记整理 P3 joyrl 比对 补充 P4 - P5 相关 代码 整理 ——> 有空 另开一页 最新版PDF下载 地址&#xff1a;https://github.com/datawhalechina/easy-rl/releases 国内地址(推荐国内读者使用)&#xff1a; 链接: https://pan.baidu.com/s/1isqQnpVRWbb3yh8…

51单片机STC89C52RC——6.1 中断系统

一&#xff0c;文字层面理解 反正我看下面的几段文字时脑壳没有正常运转。一个头几个大 中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。 当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求&#xff0c;要求CPU暂停当前的工作&#xff0c;转而去处理这…

用 Git 玩转版本控制

前言 Git&#xff0c;作为当今最流行的版本控制系统&#xff0c;不仅深受程序员们的青睐&#xff0c;也逐渐成为非开发人员管理文档版本的强大工具。本文将从实用主义的角度出发&#xff0c;深入浅出地介绍 Git 的常用命令&#xff0c;并带领大家探索 Git 的高级功能&#xff…

QT中QSettings的使用系列之二:保存和恢复应用程序主窗口

1、核心代码 #include "widget.h" #include "ui_widget.h" #include <QSettings> #include <QDebug> #include <QColo

【LLM之KG】KoPA论文阅读笔记

研究背景 知识图谱补全&#xff08;KGC&#xff09;是通过预测知识图谱中缺失的三元组来完善知识图谱的信息。传统方法主要基于嵌入和预训练语言模型&#xff0c;但这些方法往往忽视了知识图谱的结构信息&#xff0c;导致预测效果不佳。 研究目标 本文的研究目标是探索如何将…

【Linux】基础IO_3

文章目录 六、基础I/O3. 软硬链接4. 动静态库 未完待续 六、基础I/O 3. 软硬链接 使用 ln 就可以创建链接&#xff0c;使用 ln -s 可以创建软链接&#xff0c;直接使用 ln 则是硬链接。 我们对硬链接进行测试一下&#xff1a; 根据测试&#xff0c;我们知道了 硬链接就像一…

食品行业BC一体化运营方案

一、引言 在当前的市场环境下&#xff0c;食品行业面临着日益激烈的竞争和不断变化的消费者需求。传统的经营模式已无法满足现代消费者对高效、便捷和个性化服务的要求。因此&#xff0c;实施BC&#xff08;Business to Consumer&#xff09;一体化运营方案成为必然选择。通过…

筛质数(暴力法、埃氏筛、欧拉筛)

筛质数(暴力法、埃氏筛、欧拉筛) 暴力法 思路分析: 直接双for循环来求解质数 如果不设置标记只是简单地执行了break会导致内部循环(由j控制)而不是立即打印i或者跳过它。如果打印语句写到内部循环中,也会导致每个 非素数也被打印出来多次(在找到其因子之前)。 code:…

某程序员:30岁了,老婆管钱,背着我买了50万股票,亏了20w,强制她清仓后又买了36万

“辛辛苦苦攒了几年钱&#xff0c;本想买房买车&#xff0c;结果全被老婆炒股亏掉了&#xff01;” 近日&#xff0c;一位30岁的程序员大哥在网上吐苦水&#xff0c;引发了网友们的热议。 这位程序员大哥和妻子结婚后&#xff0c;一直秉持着“男主外&#xff0c;女主内”的传统…

面向普通人的prompt操作手册

主要是采用通俗易懂的话语介绍prompt的使用&#xff1a;主要参考文心一言的百度文档。 大型语言模型使用强化学习中的人类反馈来学习&#xff0c;这个过程中与人类对话的提问通常是通俗易懂的&#xff0c;也就是说&#xff0c;大型语言模型可以理解并回答一般人能听懂的问题。…

c语言 课设 atm

功能需求分析 ATM功能主界面:显示所能进行的操作,用户可多次选择。 ATM注册界面:输入用户名,用户密码,确认密码,密码长度不是六位重新输入,两次密码不一致重新输入,输入账号。密码隐藏,实现退格换行对*无影响。多人注册 ATM登录界面:输入账号,密码,三次以内输入…

git常用操作汇总大全

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;入职小红书广告投放开发&#xff0c;很高兴认识大家&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&#x1f44d;一下博…

颍川文明的传承

园子说颍川 中国第一个王朝--夏朝&#xff0c;由大禹建立于夏邑(今禹州市)&#xff0c;其子启继承王位开启了“父传子,家天下”先河。禹州现有禹王庙、禹王锁井遗址&#xff0c;有夏启宴请诸侯的“钧台”遗址。夏商周时代&#xff0c;诸侯分封兴起&#xff0c;颍川地区活跃着众…

ThinkPHP6图书借阅管理系统

有需要请加文章底部Q哦 可远程调试 ThinkPHP6图书借阅管理系统 一 介绍 此图书借阅管理系统基于ThinkPHP6框架开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 ThinkPHP6mysqlbootstrapphpstudyvscode 二 功能 用户 1 登录/注销…

多路h265监控录放开发-(8)完成摄像机管理的修改和删除功能

xviewer.h public:XViewer(QWidget* parent Q_NULLPTR);//编辑摄像机void SetCam(int index);//121 public slots:void AddCam(); //新增摄像机配置120void SetCam(); //121void DelCam(); //121 private:Ui::XViewerClass ui;QMenu left_menu_; xviewer.cpp void XView…

LeetCode 算法:排序链表 c++

原题链接&#x1f517;&#xff1a;排序链表 难度&#xff1a;中等⭐️⭐️ 题目 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4] 示例 2&#xff1a; 输…

vagrant + virtual box + rhel7 + ssh 登录

1、程序下载 vc https://download.visualstudio.microsoft.com/download/pr/1754ea58-11a6-44ab-a262-696e194ce543/3642E3F95D50CC193E4B5A0B0FFBF7FE2C08801517758B4C8AEB7105A091208A/VC_redist.x64.exe virtualbox https://download.virtualbox.org/virtualbox/7.0.18/V…

牛客练习题打卡--redis

A list保证数据线性有序且元素可重复&#xff0c;它支持lpush、blpush、rpop、brpop等操作&#xff0c;可以当作简单的消息队列使用&#xff0c;一个list最多可以存储2^32-1个元素; redis中set是无序且不重复的; zset可以按照分数进行排序 &#xff0c;是有序不重复的; Redi…