美文网首页
算法课 实验6

算法课 实验6

作者: KEEEPer | 来源:发表于2017-11-09 17:17 被阅读29次

参考文献


实验问题描述

一个汽车公司在有2条装配线的工厂内生产汽车,每条装配线有n个装配站,不同装配线上对应的装配站执行的功能相同,但是每个站执行的时间是不同的。在装配汽车时,为了提高速度,可以在这两天装配线上的装配站中做出选择,即可以将部分完成的汽车在任何装配站上从一条装配线移到另一条装配线上。装配过程如下图所示:


装配线问题

我们对这张图来分析一下



装配过程的时间包括:进入装配线时间e、每装配线上各个装配站执行时间a、从一条装配线移到另外一条装配线的时间t、离开最后一个装配站时间x。举个例子来说明,现在有2条装配线,每条装配线上有6个装配站,各个时间如下图所示:


实验解题步骤

(1)描述通过工厂的最快结构
  • 如果我们需要找到经过S(i, j)的最短路径其实我们需要先知道S(1, j-1)和S(2, j-1)的最优解(一个问题的最优解包含了最优子结构的一个最优解)
    • 通过装配线S1,j-1的最快线路,然后直接通过装配站Si,j
    • 通过装配站S2,j-1的最快线路,从装配线2移动到装配线1,然后通过装配线S1,j。
(2)一个递归的解
  • 最终目标是确定工件通过工厂的所有路径的最快时间,所以我们假设这个变量是f*,令fi[j]表示的是工件从起点到达S(i,j)的最快的时间。及f* = min(f1[n]+x1,f2[n]+x2)
    j = 1时:f1[1] = e1+a1[1],f2[1] = e2+a2[1] //包括经过当前节点的时间
    j > 1是:f1[j] = min(f1[j-1]+a1[j],f2[j-1]+t2[j-1]+a1[j]),f2[j] = min(f2[j-1]+a2[j],f1[j-1]+t1[j-1]+a2[j]) //包括经过当前节点的时间
(3)计算最快时间

用C语言来实现这个算法

//核心代码在这个地方
//由于编程语言是从0开始计数的
void fastest_way (int aNode[][N], int tNode[][N-1], fastWay[][N-1], int eNode[][], ){
  int i, j;
  fastWay[0][0] = e[0] + a[0][0];
  f[1][0] = e[1] + a[0][1];
  l[0][0] = 1;
  l[1][0] = 2;
  if (fastWay[0][j-1] < fastWay[1][j-1] + tNode[1][j-1]) {
    fastWay[0][j] = fastWay[0][j-1] + aNode[0][j];
    l[0][j] = 1;
  }
  else {
    fastWay[0][j] = fastWay[1][j-1] + tNode[1][j-1]+ aNode[0][j];
    l[0][j] = 2
  }
  //上面一段可以写成 fastWay[0][j] = Math.min(fastWay[0][j-1], fastWay[1][j-1] + tNode[1][j-1]) + aNode[0][j]
  if(fastWay[1][j-1] < fastWay[0][j-1] + tNode[0][j-1])
     {
         fastWay[1][j] = fastWay[1][j-1] + aNode[1][j];
         l[1][j] = 2;
     }
    else
     {
         fastWay[1][j] = fastWay[0][j-1] + tNode[0][j-1] + aNode[1][j];
         l[1][j] = 1;
     }
    //这一段也可以写成 fastWay[1][j] = Math.min(fastWay[0][j-1] + tNode[0][j-1], fastWay[1][j-1]) + aNode[1][j],同时通过?:三元符号可以对l指针对象进行赋值
//最终条件,临界条件
if(fastWay[0][n-1] + xNode[0] < fastWay[1][n-1] + xNode[1])
     {
         last_f = fastWay[0][n-1] + xNode[0];
         last_l = 1;
     }
     else
     {
         last_f = fastWay[1][n-1] + xNode[1];
         last_l = 2;
     }
//这样写更加好 Go\Python last_f, last_l = (fastWay[0][n-1] + xNode[0] < fastWay[1][n-1] + xNode[1]) ? (fastWay[0][n - 1] + xNode[0], 1):(fastWay[1][n-1]+xNode[1], 2)
 
} 

相关文章

  • 算法课 实验6

    参考文献 实验问题描述 一个汽车公司在有2条装配线的工厂内生产汽车,每条装配线有n个装配站,不同装配线上对应的装配...

  • 基于SARSA算法的自主寻路绕障

    机器智能实验课自选实验设计说明 选题 在Secondlife上模拟基于SARSA算法的自主寻路绕障 算法介绍 强化...

  • 算法课 实验4

    1.任务编排问题 任务编排问题取自算法导论上的一种解法,如果希望获得最多的任务数量的话,比方说有一个任务集合{S1...

  • 算法课 实验 3

    实验报告 1. 归并排序的(非递归)实现 实验讨论以及实验代码 (1)将两个相邻的有序序列归并成一个有序序列,称为...

  • 算法课 实验7

    实验问题描述: 加权无向图最短路径查找,从一点到另外一点的最小路径,比如从成都到北京,途中有好多城市,如何规划路线...

  • 3、LSB随机替换嵌入算法-2016年6月26

    LSB随机替换嵌入算法-2016年6月26一:代码 二、实验结果展示:

  • 2017-11-07

    实验楼的SQL基础练习前四个实验。over 计划:实验楼的下四个SQL实验。 计划:七月算法一节课。

  • 冒泡算法demon

    写一个冒泡算法。重温下算法课。 [1, 2, 3, 4, 5, 6, 7, 8, 9]

  • 2019-10-28

    算法的上机实验

  • DES算法实现

    实验目标 完成一个DES 算法的详细设计,内容包括: 算法概述; 总体结构; 数据结构。 实验概述 算法原理 DE...

网友评论

      本文标题:算法课 实验6

      本文链接:https://www.haomeiwen.com/subject/jhzymxtx.html