আমি 100 চলন্ত লক্ষ্যমাত্রার মধ্যে সবচেয়ে সংক্ষিপ্ত পথটি কীভাবে খুঁজে পাব? (লাইভ ডেমো অন্তর্ভুক্ত।)


89

পটভূমি

এই ছবিটি সমস্যার চিত্র তুলে ধরেছে: স্কোয়ার_গ্রিড_সহ_আরো_গিভিং_ডাইরেশন

আমি লাল বৃত্তটি নিয়ন্ত্রণ করতে পারি। লক্ষ্যগুলি হ'ল নীল ত্রিভুজ। কালো তীরগুলি লক্ষ্যগুলি যে দিকে অগ্রসর হবে সেদিকে নির্দেশ করে।

ন্যূনতম পদক্ষেপে আমি সমস্ত লক্ষ্যমাত্রা সংগ্রহ করতে চাই।

প্রতিটি পালা আমাকে অবশ্যই 1 টি পদক্ষেপ বাম / ডান / উপরে বা নীচে সরানো উচিত।

প্রতিটি টার্ন লক্ষ্যবস্তু বোর্ডে প্রদর্শিত নির্দেশাবলী অনুযায়ী 1 পদক্ষেপও সরানো হবে।

ডেমো

আমি গুগল অ্যাপেনেগিনে সমস্যার একটি প্লেযোগ্য ডেমো রেখেছি ।

আমি খুব আগ্রহী হব যদি কেউ লক্ষ্য স্কোরকে হারাতে পারে কারণ এটি দেখায় যে আমার বর্তমান অ্যালগরিদম সাব-কোটিস্টাল। (আপনি যদি এটি পরিচালনা করেন তবে অভিনন্দন বার্তা প্রিন্ট করা উচিত!)

সমস্যা

আমার বর্তমান অ্যালগরিদম স্কেলগুলি লক্ষ্যমাত্রার সংখ্যা সহ সত্যই খারাপ। সময়টি তাত্পর্যপূর্ণভাবে বেড়ে যায় এবং 16 টি মাছের জন্য এটি ইতিমধ্যে বেশ কয়েক সেকেন্ড।

আমি 32 * 32 বোর্ডের মাপের এবং 100 টি চলন্ত লক্ষ্যমাত্রার সাথে উত্তরটি গণনা করতে চাই।

প্রশ্ন

সমস্ত লক্ষ্যমাত্রা সংগ্রহের জন্য ন্যূনতম পদক্ষেপের গণনা করার জন্য একটি দক্ষ অ্যালগরিদম (আদর্শভাবে জাভাস্ক্রিপ্টে) কী?

আমি কি চেষ্টা করেছি

আমার বর্তমান পদ্ধতির স্মৃতিচারণের উপর ভিত্তি করে তবে এটি খুব ধীর এবং এটি সর্বদা সেরা সমাধান উত্পন্ন করবে কিনা তা আমি জানি না।

আমি "প্রদত্ত লক্ষ্যমাত্রার একটি সেট সংগ্রহ করতে এবং নির্দিষ্ট লক্ষ্যবস্তুতে শেষ করতে সর্বনিম্ন পদক্ষেপের সংখ্যাটি কী?" এর সাব-প্রবলেমটি আমি সমাধান করি।

পূর্ববর্তী লক্ষ্যটি দেখার জন্য প্রতিটি পছন্দ যাচাই করে সাব-সমস্যাটি পুনরাবৃত্তভাবে সমাধান করা হয়। আমি ধরে নিয়েছি যে লক্ষ্যগুলি পূর্বের সাবসেটটি যত তাড়াতাড়ি সম্ভব সংগ্রহ করা সর্বদা অনুকূল এবং তারপরে আপনি যে অবস্থানটি বর্তমান টার্গেটে পৌঁছেছিলেন যত তাড়াতাড়ি সম্ভব সরিয়ে নেওয়া (যদিও আমি জানি না এটি বৈধ অনুমান কিনা)।

এর ফলে n * 2 ^ n এর ফলাফল গণনা করা যায় যা খুব দ্রুত বৃদ্ধি পায়।

বর্তমান কোডটি নীচে দেখানো হয়েছে:

var DX=[1,0,-1,0];
var DY=[0,1,0,-1]; 

// Return the location of the given fish at time t
function getPt(fish,t) {
  var i;
  var x=pts[fish][0];
  var y=pts[fish][1];
  for(i=0;i<t;i++) {
    var b=board[x][y];
    x+=DX[b];
    y+=DY[b];
  }
  return [x,y];
}

// Return the number of steps to track down the given fish
// Work by iterating and selecting first time when Manhattan distance matches time
function fastest_route(peng,dest) {
  var myx=peng[0];
  var myy=peng[1];
  var x=dest[0];
  var y=dest[1];
  var t=0;
  while ((Math.abs(x-myx)+Math.abs(y-myy))!=t) {
    var b=board[x][y];
    x+=DX[b];
    y+=DY[b];
    t+=1;
  }
  return t;
}

// Try to compute the shortest path to reach each fish and a certain subset of the others
// key is current fish followed by N bits of bitmask
// value is shortest time
function computeTarget(start_x,start_y) {
  cache={};
  // Compute the shortest steps to have visited all fish in bitmask
  // and with the last visit being to the fish with index equal to last
  function go(bitmask,last) {
    var i;
    var best=100000000;
    var key=(last<<num_fish)+bitmask;
    if (key in cache) {
      return cache[key];
    }
    // Consider all previous positions
    bitmask -= 1<<last;
    if (bitmask==0) {
      best = fastest_route([start_x,start_y],pts[last]);
    } else {
      for(i=0;i<pts.length;i++) {
        var bit = 1<<i;
        if (bitmask&bit) {
          var s = go(bitmask,i);   // least cost if our previous fish was i
          s+=fastest_route(getPt(i,s),getPt(last,s));
          if (s<best) best=s;
        }
      }
    }
    cache[key]=best;
    return best;
  }
  var t = 100000000;
  for(var i=0;i<pts.length;i++) {
    t = Math.min(t,go((1<<pts.length)-1,i));
  }
  return t;
}

আমি কি বিবেচনা করেছি

কিছু বিকল্পের বিষয়ে আমি ভাবলাম যা হ'ল:

  1. মধ্যবর্তী ফলাফলের ক্যাচিং। দূরত্ব গণনা অনেক সিমুলেশন পুনরাবৃত্তি করে এবং মধ্যবর্তী ফলাফল ক্যাশে হতে পারে।
    যাইহোক, আমি মনে করি না এটি এটি ঘনিষ্ঠ জটিলতা থাকা বন্ধ করবে।

  2. একটি এ * অনুসন্ধান অ্যালগরিদম যদিও এটি আমার কাছে স্পষ্ট নয় যে উপযুক্ত গ্রহণযোগ্য হিউরিস্টিক কী হবে এবং এটি বাস্তবে কার্যকর হবে।

  3. ভ্রমণের বিক্রয়কর্মী সমস্যার জন্য ভাল অ্যালগরিদমগুলি তদন্ত করছে এবং দেখুন যে তারা এই সমস্যায় প্রযোজ্য কিনা।

  4. সমস্যাটি এনপি-হার্ড এবং এটির জন্য সর্বোত্তম উত্তর চেয়ে নেওয়া অযৌক্তিক তা প্রমাণ করার চেষ্টা করা।


4
আমি # 4 এবং পরবর্তীকালে # 3 এর জন্য যাব: যথেষ্ট পরিমাণে বড় বোর্ড সহ এটি টিএসপিটিকে বেশ ভালভাবে নকল করে।
জন ডিভোরাক

4
যতদূর আমি জানি, টিএসপি হ'ল ইউক্লিডিয়ান মেট্রিকের পাশাপাশি ম্যানহাটন মেট্রিক (স্কোয়ার গ্রিড) এর সাথে এনপি-হার্ড।
জন ডিভোরাক

4
আপনি যদি সাধারণ গাছ-অনুসন্ধানের মাধ্যমে এটি করেন তবে হ্যাঁ, এটি ক্ষতিকারক হবে। তবে, আপনি যদি প্রতিটি পদক্ষেপে একটি শালীন হিউরিস্টিক খুঁজে পেতে পারেন তবে এটি সত্যিকারের অনুকূল নাও হতে পারে তবে এটি খুব ভাল হতে পারে। একটি সম্ভাব্য তাত্ত্বিক হতে পারে, বর্তমান মাছের সেট দেখে, কোনটি খুব দ্রুত পৌঁছে যেতে পারে? একটি গৌণ হিউরিস্টিক হতে পারে, আমি খুব দ্রুত কোন দুটি মাছ পৌঁছতে পারি?
মাইক ডুনলাভে

4
@ মাইকডুনলাভে যা লোভী টিএসপি অ্যালগরিদমের সাথে সামঞ্জস্য করবে এবং এটি বাস্তবে খুব ভালভাবে কাজ করে। নিকটতম মাছের জন্য যাওয়াই একটি ভাল ধারণা বলে মনে হচ্ছে
জন ডিভোরাক

4
সামগ্রী এবং কাঠামো উভয়ই ইদানীং দেখেছি এমন সেরা প্রশ্নের জন্য +1।
সূফসক্রোলিট

উত্তর:


24

আপনি সাহিত্যের সন্ধান করেছেন? আমি এই কাগজপত্রগুলি পেয়েছি যা আপনার সমস্যার বিশ্লেষণ বলে মনে হচ্ছে:

আপডেট 1:

উপরের দুটি কাগজপত্র ইউক্যালিডিয়ান মেট্রিকের জন্য রৈখিক আন্দোলনে মনোনিবেশ করে বলে মনে হচ্ছে।


ধন্যবাদ - আমি এই কাগজপত্রগুলি দেখিনি তবে সেগুলি খুব প্রাসঙ্গিক দেখাচ্ছে। আমি দেখতে পাচ্ছি যে আমি জেনেটিক অ্যালগরিদমকে আমার ক্ষেত্রে কাজ করার জন্য খাপ খাইয়ে নিতে পারি এবং এটি ব্রুর ফোর্সের পদ্ধতির ফলাফলের সাথে তুলনা করতে পারি।
পিটার ডি রিভাজ

13

লোভী পদ্ধতি

মন্তব্যে প্রস্তাবিত একটি পদ্ধতি হ'ল প্রথমে নিকটতম টার্গেটে যাওয়া।

আমি ডেমোটির একটি সংস্করণ রেখেছি যা এখানে এই লোভী পদ্ধতির মাধ্যমে গণনা করা মূল্য অন্তর্ভুক্ত করে ।

কোডটি হ'ল:

function greedyMethod(start_x,start_y) {
  var still_to_visit = (1<<pts.length)-1;
  var pt=[start_x,start_y];
  var s=0;
  while (still_to_visit) {
    var besti=-1;
    var bestc=0;
    for(i=0;i<pts.length;i++) {
      var bit = 1<<i;
      if (still_to_visit&bit) {
        c = fastest_route(pt,getPt(i,s));
        if (besti<0 || c<bestc) {
          besti = i;
          bestc = c;
        }
      }
    }
    s+=c;
    still_to_visit -= 1<<besti;
    pt=getPt(besti,s);
  }
  return s;
}

10 টার্গেটের জন্য এটি সর্বোত্তম দূরত্বের দ্বিগুণ, তবে কখনও কখনও অনেক বেশি (যেমন * 4) এবং মাঝে মাঝে এমনকি সর্বোত্তমটিকেও হিট করে।

এই পদ্ধতিটি অত্যন্ত দক্ষ তাই উত্তরটি উন্নত করতে আমি কিছু চক্র সাধ্যের সাথে তুলতে পারি।

এরপরে আমি পিঁপড়া কলোনী পদ্ধতিগুলি ব্যবহার করে বিবেচনা করছি যা তারা সমাধানের জায়গাটি কার্যকরভাবে আবিষ্কার করতে পারে কিনা তা দেখার জন্য।

পিপড়া উপনিবেশ পদ্ধতি

পিঁপড়ার একটি উপনিবেশ পদ্ধতি এই সমস্যার জন্য উল্লেখযোগ্যভাবে কাজ করবে বলে মনে হচ্ছে। লোভী এবং পিঁপড়া কলোনী উভয় পদ্ধতি ব্যবহার করার সময় এই উত্তরের লিঙ্কটি এখন ফলাফলগুলির সাথে তুলনা করে।

ধারণাটি হ'ল পিঁপড়াগুলি ফেরোমনের বর্তমান স্তরের উপর ভিত্তি করে তাদের রুটগুলি সম্ভাব্যভাবে বেছে নেয়। প্রতি 10 ট্রায়ালের পরে, আমরা তাদের খুঁজে পাওয়া সংক্ষিপ্ততম ট্রেইল ধরে অতিরিক্ত ফেরোমোন জমা করি।

function antMethod(start_x,start_y) {
  // First establish a baseline based on greedy
  var L = greedyMethod(start_x,start_y);
  var n = pts.length;
  var m = 10; // number of ants
  var numrepeats = 100;
  var alpha = 0.1;
  var q = 0.9;
  var t0 = 1/(n*L);

  pheromone=new Array(n+1); // entry n used for starting position
  for(i=0;i<=n;i++) {
    pheromone[i] = new Array(n);
    for(j=0;j<n;j++)
      pheromone[i][j] = t0; 
  }

  h = new Array(n);
  overallBest=10000000;
  for(repeat=0;repeat<numrepeats;repeat++) {
    for(ant=0;ant<m;ant++) {
      route = new Array(n);
      var still_to_visit = (1<<n)-1;
      var pt=[start_x,start_y];
      var s=0;
      var last=n;
      var step=0;
      while (still_to_visit) {
        var besti=-1;
        var bestc=0;
        var totalh=0;
        for(i=0;i<pts.length;i++) {
          var bit = 1<<i;
          if (still_to_visit&bit) {
            c = pheromone[last][i]/(1+fastest_route(pt,getPt(i,s)));
            h[i] = c;
            totalh += h[i];
            if (besti<0 || c>bestc) {
              besti = i;
              bestc = c;
            }
          }
        }
        if (Math.random()>0.9) {
          thresh = totalh*Math.random();
          for(i=0;i<pts.length;i++) {
            var bit = 1<<i;
            if (still_to_visit&bit) {
              thresh -= h[i];
              if (thresh<0) {
                besti=i;
                break;
              }
            }
          }
        }
        s += fastest_route(pt,getPt(besti,s));
        still_to_visit -= 1<<besti;
        pt=getPt(besti,s);
        route[step]=besti;
        step++;
        pheromone[last][besti] = (1-alpha) * pheromone[last][besti] + alpha*t0;
        last = besti;
      }
      if (ant==0 || s<bestantscore) {
        bestroute=route;
        bestantscore = s;
      }
    }
    last = n;
    var d = 1/(1+bestantscore);
    for(i=0;i<n;i++) {
      var besti = bestroute[i];
      pheromone[last][besti] = (1-alpha) * pheromone[last][besti] + alpha*d;
      last = besti;
    }
    overallBest = Math.min(overallBest,bestantscore);
  }
  return overallBest;
}

ফলাফল

10 পিঁপড়ির 100 পুনরাবৃত্তি ব্যবহার করে এই পিপড়া উপনিবেশ পদ্ধতিটি এখনও খুব দ্রুত (সম্পূর্ণ অনুসন্ধানের জন্য 3700 মাইলের তুলনায় 16 টার্গেটের জন্য 37ms) এবং খুব নির্ভুল বলে মনে হয়।

নীচের সারণীতে 16 টি টার্গেট ব্যবহার করে 10 টি পরীক্ষার ফলাফল দেখানো হয়েছে:

   Greedy   Ant     Optimal
   46       29      29
   91       38      37
  103       30      30
   86       29      29
   75       26      22
  182       38      36
  120       31      28
  106       38      30
   93       30      30
  129       39      38

পিপড়া পদ্ধতি লোভীর চেয়ে উল্লেখযোগ্যভাবে ভাল বলে মনে হয় এবং প্রায়শই সর্বোত্তমের কাছাকাছি থাকে।


ভাল লাগল আপনি এখনও অবসন্ন অনুসন্ধান থেকে সর্বোত্তম ফলাফল না পেয়ে থাকতে পারেন (বা সম্ভবত এর অক্ষমতার কারণে কখনও নয়!) তবে কী পরিমাণ পিঁপড়া কলোনী বোর্ডের আকার (32x32) এর সাথে একই সংখ্যার লক্ষ্যবস্তু দিয়ে স্কেল করে তা দেখতে আকর্ষণীয় হবে।
টিম্সিএজ

8

সমস্যাটি সাধারণ ভ্রমণ ভ্রমণ বিক্রয়কর্ম সমস্যার ক্ষেত্রে প্রতিনিধিত্ব করা যেতে পারে এবং তারপরে একটি ট্র্যাভিশনাল ট্র্যাভেলিং সেলসম্যান সমস্যায় রূপান্তরিত হতে পারে। এটি একটি বহুল আলোচিত সমস্যা is এটি সম্ভব হয় যে ওপি-র সমস্যার সর্বাধিক দক্ষ সমাধান টিএসপি-র সমাধানের চেয়ে বেশি দক্ষ নয়, তবে কোনওভাবেই নিশ্চিত নয় (আমি সম্ভবত ওপি-র সমস্যা কাঠামোর কিছু দিক নিয়ে সুবিধা নিতে ব্যর্থ হচ্ছি যা দ্রুত সমাধানের সুযোগ দেয়) যেমন এর চক্রীয় প্রকৃতি)। যে কোনও উপায়ে এটি একটি ভাল সূচনা পয়েন্ট।

থেকে সি নুন ও J.Bean, সাধারণভাবে ভ্রমণ সেলসম্যান প্রবলেম এর একটি দক্ষ ট্রান্সফরমেসন :

সাধারণভাবে ভ্রমণ সেলসম্যান প্রবলেম (GTSP) নির্বাচন এবং ক্রম সিদ্ধান্তের জড়িত সমস্যার জন্য একটি দরকারী মডেল। সমস্যার অসমমিত সংস্করণটি নোড এন দিয়ে নির্দেশিত গ্রাফে সংজ্ঞায়িত করা হয়, আর্কস এ এবং সংযুক্ত চাপের একটি ভেক্টরকে সংযুক্ত করে গ। নোডগুলি মিউচুয়াল এক্সক্লুসিভ এবং এক্সটোসিটিভ নোডসেটগুলিতে প্রগ্রেপড। সংযোগকারী আর্কগুলি কেবলমাত্র বিভিন্ন সেটের অন্তর্ভুক্ত নোডগুলির মধ্যে সংজ্ঞায়িত করা হয়, এটি হ'ল কোনও ইন্টারসেট আর্ক নেই। প্রতিটি সংজ্ঞায়িত চাপটি একই নন-নেতিবাচক ব্যয় করে। জিটিএসপিকে ন্যূনতম ব্যয় এম-অর্ক চক্রের সন্ধানের সমস্যা হিসাবে বলা যেতে পারে যা প্রতিটি নোডেট থেকে ঠিক একটি নোড অন্তর্ভুক্ত করে

ওপির সমস্যার জন্য:

  • প্রত্যেক সদস্যের Nএকটি নির্দিষ্ট সময়ে নির্দিষ্ট মাছের অবস্থান। এই প্রতিনিধিত্ব হিসাবে (x, y, t), যেখানে (x, y)একটি গ্রিড তুল্য, এবং tসময় এই তুল্য এ যা মাছ হবে। ওপি-র উদাহরণের বামতম মাছের জন্য, এর মধ্যে প্রথম কয়েকটি (1-ভিত্তিক) হ'ল: (3, 9, 1), (4, 9, 2), (5, 9, 3)মাছটি ডানদিকে চলে যাওয়ার সাথে সাথে।
  • এন এর যে কোনও সদস্যের জন্য fish(n_i)নোড দ্বারা প্রতিনিধিত্ব করা মাছের আইডি ফিরিয়ে দেওয়া হোক । এন এর যে কোনও দুটি সদস্যের জন্য আমরা manhattan(n_i, n_j)দুটি নোডের মধ্যে ম্যানহাটনের দূরত্ব এবং time(n_i, n_j) নোডগুলির মধ্যে অফসেটের জন্য গণনা করতে পারি ।
  • বিচ্ছিন্ন সাবটেটের সংখ্যা মাছের সংখ্যার সমান। বিচ্ছিন্ন সাবসেটটিতে কেবল S_iনোড থাকবে fish(n) == i
  • যদি দুটি নোডের জন্য iএবং j fish(n_i) != fish(n_j)তারপরে iএবং এর মধ্যে একটি তোরণ রয়েছে j
  • নোড i এবং নোড জয়ের মধ্যে ব্যয় হয় time(n_i, n_j)বা অপরিজ্ঞাত হয় time(n_i, n_j) < distance(n_i, n_j)( যদি মাছটি সেখানে পৌঁছানোর আগে অবস্থানটি পৌঁছানো যায় না, সম্ভবত কারণ এটি পিছনে রয়েছে)। এই পরবর্তী ধরণের আরাকস সরানো যেতে পারে।
  • অন্যান্য সমস্ত নোডে আর্কস এবং ব্যয়ের সাথে প্লেয়ারের অবস্থানের প্রতিনিধিত্ব করে একটি অতিরিক্ত নোড যুক্ত করা দরকার।

এই সমস্যার সমাধানের পরে সর্বনিম্ন ব্যয় (অর্থাত্ সকল মাছের প্রাপ্তির জন্য ন্যূনতম সময়) সহ পাথের জন্য প্রতিটি নোড সাবসেটে (অর্থাত্ প্রতিটি মাছ একবার পাওয়া যায়) একবারে পরিদর্শন করতে পারে।

উপরের সূত্রটি কীভাবে একটি ট্র্যাডিশনাল ট্র্যাভেলিং সেলসম্যান সমস্যায় রূপান্তরিত হতে পারে এবং পরবর্তীকালে বিদ্যমান কৌশলগুলির সাথে সমাধান বা আনুমানিক রূপান্তরিত হতে পারে তা কাগজটি বর্ণনা করে। আমি বিস্তারিত মাধ্যমে পড়েন নি কিন্তু অন্য কাগজ করে একটি উপায় এটি দক্ষ হওয়ার জন্য একদম পাল্টে মধ্যে এই আছে হল এই এক

জটিলতার সাথে সুস্পষ্ট সমস্যা রয়েছে। বিশেষত নোডের স্থান অসীম! এটি কেবল নির্দিষ্ট সময় দিগন্ত পর্যন্ত নোড জেনারেটর দ্বারা হ্রাস করা যেতে পারে। যদি tনোড জেনার জন্য টাইমস্টেপের fসংখ্যা হয় এবং মাছের সংখ্যা হয় তবে নোডের জায়গার আকার হবে t * f। একটি নোডের সময়ে jসর্বাধিক (f - 1) * (t - j)বহির্গামী আর্ক থাকবে (কারণ এটি সময়মতো বা তার নিজস্ব উপসেটে ফিরে যেতে পারে না)। মোট আরাক্সের সংখ্যাটি অর্কের ক্রমে হবে t^2 * f^2। চাপের কাঠামোটি সম্ভবত পরিষ্কার করা যেতে পারে, যাতে মাছের পাথগুলি অবশেষে চক্রাকার হয় advantage মাছগুলি তাদের চক্রের দৈর্ঘ্যের সর্বনিম্ন সাধারণ ডিনোমিনেটর একবারে তাদের কনফিগারেশনটি পুনরাবৃত্তি করবে যাতে সম্ভবত এই সত্যটি ব্যবহার করা যায়।

টিএসপি সম্পর্কে এটি যথেষ্ট সম্ভব কিনা তা আমি জানি না এবং আমি মনে করি না এটির অর্থ এই যে পোস্ট করা সমস্যাটি অগত্যা এনপি-হার্ড ... তবে এটি একটি অনুকূল বা সীমিত সমাধানের সন্ধানের এক দৃষ্টিভঙ্গি is ।


ধন্যবাদ, এটি আমার কাছে নতুন এবং খুব আকর্ষণীয়। আমি মনে করি আমার অনুকূলটির 3/2 এর আনুমানিক ফ্যাক্টরের মধ্যে সমাধানটি দক্ষতার সাথে খুঁজে পেতে ক্রিস্টোফাইডস অ্যালগরিদমের সাথে একত্রে এই রূপান্তরটি ব্যবহার করতে সক্ষম হওয়া উচিত। যদি আমি এটি কাজ করতে পাই তবে আমি উত্পাদিত রুটগুলি ডেমো পৃষ্ঠায় যুক্ত করব।
পিটার ডি রিভাজ

আহ, আমি মনে করি আমার পরিকল্পনায় সমস্যা আছে যদিও আমার মূল সমস্যাটি মেট্রিকের ক্ষেত্রে একটি উপযুক্ত বৈষম্যকে সন্তুষ্ট করার একটি সম্পূর্ণ গ্রাফ, রূপান্তরটি অসম্পূর্ণ গ্রাফের ফলাফল হিসাবে বর্ণনা করেছে এবং তাই ক্রিস্টোফাইডস অ্যালগরিদম আর প্রযোজ্য নয়। আকর্ষণীয় দৃষ্টিকোণ জন্য যাইহোক ধন্যবাদ।
পিটার ডি রিভাজ

হ্যাঁ আমি উল্লেখ করতে ভুলে গেছি যে ত্রিভুজ বৈষম্যটি আর নেই। এটি হিউরিস্টিক সমাধান এবং আরও সাধারণ আনুমানিকতার জন্য একটি ভাল জাম্পিং অফ পয়েন্ট।
টিম্সিএজ

1

আমি মনে করি অন্য একটি পদ্ধতি হবে:

  • লক্ষ্যমাত্রার পথ গণনা করুন - ভবিষ্যদ্বাণীমূলক।
  • Voronoi ডায়াগ্রাম ব্যবহার চেয়ে

উদ্ধৃতি উইকিপিডিয়া:

গণিতে, একটি ভোরোনাই চিত্রটি বিভিন্ন অঞ্চলে স্থানকে বিভক্ত করার একটি উপায়। বিন্দুগুলির একটি সেট (যাকে বীজ, সাইট বা জেনারেটর বলা হয়) আগেই নির্দিষ্ট করে দেওয়া হয়েছে এবং প্রতিটি বীজের জন্য সেই বীজের নিকটবর্তী সমস্ত পয়েন্টের সাথে সংশ্লিষ্ট একটি অঞ্চল থাকবে যা অন্য যে কোনও অঞ্চলের চেয়ে নিকটবর্তী।

সুতরাং, আপনি একটি লক্ষ্য চয়ন করেন, কিছু পদক্ষেপের জন্য এটি অনুসরণ করুন এবং সেখানে একটি বীজ পয়েন্ট নির্ধারণ করুন। অন্যান্য সমস্ত লক্ষ্যগুলি সহ এটিও করুন এবং আপনি একটি ভারোনি ডায়াগ্রাম পাবেন। আপনি কোন অঞ্চলে নির্ভর করে আপনি এর বীজপয়েন্টে যান। ভায়োলা, আপনি প্রথম মাছ পেয়েছেন। আপনি এই সমস্ত পদক্ষেপ না নেওয়া পর্যন্ত এখন এই পদক্ষেপটি পুনরাবৃত্তি করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.