Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 最大效率_Performance_Algorithm_Traveling Salesman_Nonlinear Optimization - Fatal编程技术网

Performance 最大效率

Performance 最大效率,performance,algorithm,traveling-salesman,nonlinear-optimization,Performance,Algorithm,Traveling Salesman,Nonlinear Optimization,最大效率问题 有N个城市,有一个流浪者 他从一个城镇到另一个城镇所花的时间是众所周知的——Txy(从x镇到y镇) 他可以从任何一个城镇前往任何其他城镇,因此这是一个完整的图表 在每个镇上都有流浪者想要收集的一笔钱 没有足够的时间穿越所有的城市 有了总可用时间T和起点i,问题是找到最佳路线,这样他收集的资金将达到最大 输入数字范围: N在400到600之间 Mx(M1,M2,…)在100和500之间,x在1和N之间 Txy在80和200之间,x和y在1和N之间 Txy是最佳时间距离,因此对于1和

最大效率问题

有N个城市,有一个流浪者

他从一个城镇到另一个城镇所花的时间是众所周知的——Txy(从x镇到y镇)

他可以从任何一个城镇前往任何其他城镇,因此这是一个完整的图表

在每个镇上都有流浪者想要收集的一笔钱

没有足够的时间穿越所有的城市

有了总可用时间T和起点i,问题是找到最佳路线,这样他收集的资金将达到最大

输入数字范围:

  • N在400到600之间
  • Mx(M1,M2,…)在100和500之间,x在1和N之间
  • Txy在80和200之间,x和y在1和N之间
  • Txy是最佳时间距离,因此对于1和N之间的任何x、y和z,Txy
  • T在3500和5000之间
    • 似乎是动态的:

      表示a[x]-从x市收取的款项

      dp[x][t]表示他可以收集的最大金额,花时间t并在城市x完成。初始化和更新如下:

    • 对于起始点x0dp[x0][0]:=a[x0]。对于其他城市xdp[x][0]:=-1(无效)
    • 每次t1t
      对于每个城市x
      对于每个城市ys.t.edge[y][x]=0//有可能及时到达y p
      然后dp[x][t]=max(dp[x][t],dp[y][t-边[x][y]]+a[x])
    • 所有dp[x][t]上的最大返回值

    • 总复杂度为O(T*N^2)

      这是一个众所周知的问题的变体,通常称为旅行商问题。 您可以在此处找到有关此问题和类似问题的详细说明以及wikipedia上的更多链接:
      我正在考虑一种基于回溯的解决方案。 你应该定义一个算法来找到最佳的解决方案(一个得到更多的钱)。 当您已前往所有城市或超过您已到达的时间时,您将结束该算法。 忽略非盈利的候选人:你必须测试,根据剩余的最少参观城市数量,你赚的钱是否至少是当前的最佳解决方案;还要检查从一个城市到所有剩余城市的最短时间

      要想知道你能挣多少钱,你必须将一个城市的最低收入乘以仍有多少城市需要参观

      这同样适用于您访问所有剩余城市所需的最短时间

      编辑:我忘了告诉你这个算法的代价是O(a^n),其中a是图的出现者的数目(即n*(n-1)),而n是顶点的数目(即n)。
      如果您定义好的函数来了解实际候选对象何时不能成为解决方案,以及何时不能比当前最佳解决方案更好,那么成本可能会更好(如果您幸运地在迭代过程中找到了解决方案,这确实有助于减少操作时间).

      每个城镇的资金数额不得而知,因此最好的路线是从一个城镇到下一个城镇的最短路线

      如果我使用递归在Javascript中编程,我会这样做:

      c=[“伦敦”、“曼彻斯特”、“利物浦”]//城市
      t={
      “利物浦”:{
      “曼彻斯特”:130,
      “伦敦”:260
      },
      “伦敦”:{
      “曼彻斯特”:250,
      “利物浦”:260
      },
      “曼彻斯特”:{
      “伦敦”:250,
      “利物浦”:130
      }
      }//城市之间的时间
      cn=‘伦敦’//当前城市
      var最短距离=500,
      分配的时间=300,
      下一个城市,
      时间=0,
      总时间=0,
      路径=[cn];
      最优=函数(cn){
      对于(t[cn]中的i){
      //为了不去参观我们已经参观过的城市
      if(路径索引of(i)=-1){
      next_city=t[cn][i]分配的时间){
      写下(“城市之间的最佳路线是:“+路径”);
      }否则{
      最佳(下一个城市);
      }
      }
      最优(cn);
      

      对不起,没有关于算法的帮助,这是从编程的角度来看的,因为我认为这是一个有趣的挑战。以上不是最佳思维。

      这是一个问题吗?公开的挑战?你在哪里需要帮助?这不是挑战,这是我面临的真正问题。问题是在另一个上下文中,但我这样写是为了更容易阅读/理解。我在寻找最佳解决方案。他从哪里开始?在任何一个城市?起点被定义为一个城市。每个城市的货币数量是已知的还是随机的,介于100到500之间?不是。旅行推销员问题需要访问所有的城市,是NP难问题,而这个问题没有,并且有多项式解,请看我的回答。我说这个问题是一个与旅行推销员问题不同的变体。那么我不明白P问题怎么可能是NP问题的变体。那么“变体”是什么意思呢?变体的意思是相似的,但在某些方面不同。所描述的问题类似于定向越野记分赛。定向运动员在访问控制点时获得分数。每个控件具有不同数量的点(已知)。有一个时间限制,超过时间限制完成比赛将失去分数。没有足够的时间访问所有控件。赢家是获得最多分数的定向运动员。这个问题
      c = ['london', 'manchester', 'liverpool']; //Cities
      
      t = {
          'liverpool': {
              'manchester': 130,
              'london': 260
          },
          'london': {
              'manchester': 250,
              'liverpool': 260
          },
          'manchester': {
              'london': 250,
              'liverpool': 130
          }
      } //Time between cities
      
      cn = 'london'; //Current city
      
      var shortestDistance = 500,
          allottedTime = 300,
          next_city,
          time = 0,
          totalTime = 0,
          path = [cn];
      
      optimal = function (cn) {
      
          for (i in t[cn]) {
              //So as not to visit cities that we have already visited
              if(path.indexOf(i)===-1) {
                  next_city = t[cn][i] < shortestDistance ? i : next_city;
                  shortestDistance = t[cn][i];
                  totalTime = Math.min(t[cn][i] , shortestDistance);
              }
          }
          time += totalTime;
      
          path.push(next_city);
      
          if(time > allottedTime){
              document.write("The most optimal route between cities is: " + path);
          } else {
              optimal(next_city);
          }
      
      }
      
      optimal(cn);