বহুভুজ মধ্যে বহুভুজ প্যাকিং ArcGIS ডেস্কটপ ব্যবহার করে?


25

আমার একটি বুলিয়ান রাস্টার আছে

রাস্টারদের ধূসর অঞ্চলে আমি একটি নির্দিষ্ট আকারের মধ্যে একটি নির্দিষ্ট আকারের বহুভুজ ফিট করতে চাই।

মূলত, আমার একটি অনিয়মিত বহুভুজ রয়েছে এবং আমি যতবার সম্ভব অনিয়মিত বহুভুজের পরিধির মধ্যে একটি পরিচিত বহুভুজকে "ফিট" করতে চাই।

বহুভুজের দিকনির্দেশটি কোনও বিষয় নয় এবং এটি একটি বর্গ হতে পারে। আমি এটি গ্রাফিকভাবে ফিট করতে চাই, তবে যদি এটি কেবল বহুভুজের সাথে একটি সংখ্যক সংযুক্ত থাকে (# এটি ফিট) যা কাজ করবে work

আমি আরকিজিআইএস ডেস্কটপ 10 ব্যবহার করছি।


8
এটি খুব কঠিন সমস্যা is উদাহরণস্বরূপ, অনেকগুলি চেনাশোনা যতটা সম্ভব স্কোয়ারে ফিট করতে অনেক কাজ লাগে takes মূল বহুভুজ যখন জটিল হয় - উদাহরণ হিসাবে - আপনার কিছু শক্তিশালী অপ্টিমাইজেশন পদ্ধতি প্রয়োজন। এই সমস্যার জন্য আমি যে সর্বোত্তম পদ্ধতিটি খুঁজে পেয়েছি তা অ্যানিলিং সিমুলেটেড, তবে এটি আরকজিআইএস এ উপলব্ধ হবে না এবং এটি স্ক্রিপ্টের জন্য অত্যন্ত চতুর স্ক্রিপ্টিং লাগবে (আর্কজিআইএস খুব ধীর)। আপনি সম্ভবত নিজের প্রয়োজনীয়তাগুলি কিছুটা শিথিল করতে পারবেন, যেমন ছোট বহুভুজকে যথাসম্ভব বারের চেয়ে যথেষ্ট পরিমাণে ফিট করা ?
হোবার

1
@ শুভ আমার পোস্ট সম্পাদনা করার জন্য ধন্যবাদ। হ্যাঁ, পর্যাপ্ত সংখ্যক সময় কাজ করবে। অথবা, প্রদত্ত কোণে কীভাবে হয়। প্রাক্তন। উপরের চিত্রটিতে, বহুগুণে আমি বহুগুণ ফিট করেছিলাম যতদূর আমি সেই অভিযোজনে থাকতে পারতাম, আমি যদি তাদের 90 ডিগ্রি ঘোরানো হত তবে আপনি আরও একটি ফিট করতে পারেন ...
থাদ

1
হ্যাঁ, তবে এটি ক্ষতির মধ্যেও ভরপুর। কিছু প্রাথমিক হয়। উদাহরণস্বরূপ, ESRI- রচিত এবং -প্রকাশিত পাঠ্য, "অর্কভিউ জিআইএস জেনে নেওয়া" (সংস্করণ 3 এর জন্য) একটি অনুশীলন অন্তর্ভুক্ত করা হয়েছে যাতে একটি ফুটবল ক্ষেত্রের প্রতিনিধিত্বকারী একটি আয়তক্ষেত্রটি বহুভুজের মধ্যে ইন্টারেক্টিভভাবে স্থাপন করা হয়েছিল। সমস্যাটি ছিল, অনুশীলনের উত্তরটি ভুল ছিল কারণ লেখক ডেটা প্রজেক্ট করতে ব্যর্থ হয়েছিল এবং ভৌগলিক স্থানাঙ্ক ব্যবহারে ত্রুটিগুলি ফলাফলকে প্রভাবিত করতে যথেষ্ট বড় ছিল। উত্তরটি জিআইএস-এ ভাল লাগছিল, তবে যদি কেউ এই ক্ষেত্রটি তৈরি করার চেষ্টা করে থাকে তবে তারা দেখতে পেত যে এর জন্য যথেষ্ট জায়গা নেই :-)।
হোবার

6
@ যেহেতু আমি অনুমান করি তারা "বল পার্ক" চিত্রটি যথেষ্ট বলে ভেবেছিল।
কर्क কুইকেনডাল

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

উত্তর:


22

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

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

এই সমস্যার সীমাবদ্ধতাগুলি হ'ল সমাধানের মধ্যে কোনও দুটি টাইল ওভারল্যাপ হতে পারে না।

বহুভুজের কোষগুলিকে পরিপূর্ণ করে ("অঞ্চল") 1, 2, ..., এম পরিমিত করে এটিকে দক্ষ গণনা করার উপযোগী করে কিছুটা বিমূর্তভাবে ফ্রেম করা যেতে পারে । যে কোনও টাইল বসানো স্থানটি শূন্য এবং এরগুলির একটি সূচক ভেক্টরের সাথে এনকোড করা যেতে পারে , যাকে অন্য কোথাও টাইল এবং শূন্য দ্বারা আবৃত কোষগুলির সাথে সামঞ্জস্য করে। এই এনকোডিংয়ে, টাইলস সংগ্রহের জন্য প্রয়োজনীয় সমস্ত তথ্য তাদের সূচক ভেক্টরগুলিকে সংশ্লেষের মাধ্যমে পাওয়া যাবে (উপাদান অনুসারে উপাদান হিসাবে, যথারীতি): যোগফলটি ননজারো হবে ঠিক যেখানে কমপক্ষে একটি টাইল একটি ঘরকে আচ্ছাদন করে এবং যোগফল আরও বেশি হবে একের চেয়েও কোথাও দুটি বা আরও টাইলস ওভারল্যাপ হয়। (যোগফল কার্যকরভাবে ওভারল্যাপের পরিমাণ গণনা করে))

আরও একটি সামান্য বিমূর্ততা: সম্ভাব্য টাইল স্থাপনের সেটটি নিজেই গণনা করা যেতে পারে, বলুন 1, 2, ..., এন । টাইল স্থাপনের কোনও সেট নির্বাচন নিজেই একটি সূচক ভেক্টরের সাথে মিলে যায় যেখানে টাইলগুলি স্থাপন করা উচিত।

ধারণাগুলি ঠিক করার জন্য এখানে একটি ছোট উদাহরণ রয়েছে । এটি গণনার জন্য ব্যবহৃত ম্যাথামেটিক কোডের সাথে রয়েছে , যাতে প্রোগ্রামিংয়ের অসুবিধা (বা এর অভাব) প্রকট হয়ে উঠতে পারে।

প্রথমে, আমরা একটি অঞ্চলকে টাইলসযুক্ত করে চিত্রিত করেছি:

region =  {{0, 0, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}};

চিত্র 1: অঞ্চল

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

Flatten[region]

{0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}

90 ডিগ্রির গুণমান দ্বারা সমস্ত আবর্তনের পাশাপাশি নীচের টাইলটি ব্যবহার করুন:

tileSet = {{{1, 1}, {1, 0}}};

চিত্র 2: টাইল

ঘূর্ণন (এবং প্রতিচ্ছবি) উত্পন্ন করার কোড:

apply[s_List, alpha] := Reverse /@ s;
apply[s_List, beta] := Transpose[s];
apply[s_List, g_List] := Fold[apply, s, g];
group = FoldList[Append, {}, Riffle[ConstantArray[alpha, 4], beta]];
tiles = Union[Flatten[Outer[apply[#1, #2] &, tileSet, group, 1], 1]];

(এই কিছুটা অস্বচ্ছ গণনাটি /math//a/159159 এ একটি উত্তরে ব্যাখ্যা করা হয়েছে , যা এটি সহজেই টাইলের সমস্ত সম্ভাব্য আবর্তন এবং প্রতিবিম্ব উত্পাদন করে এবং তারপরে কোনও সদৃশ ফলাফলগুলি সরিয়ে দেয়))

মনে করুন আমরা এখানে টাইল স্থাপন করেছি:

চিত্র 3: টালি স্থাপন

3, 6 এবং 7 টি ঘর এই প্লেসমেন্টে আচ্ছাদিত। যা সূচক ভেক্টর দ্বারা মনোনীত করা হয়

{0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}

আমরা যদি এই টাইলটি এক কলামকে ডানদিকে সরিয়ে ফেলি, তবে সেই সূচক ভেক্টরটি পরিবর্তে

{0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}

এই উভয় অবস্থানে একই সাথে টাইলস স্থাপনের চেষ্টা করার সংমিশ্রণটি এই সূচকগুলির যোগফল দ্বারা নির্ধারিত হয়,

{0, 0, 1, 1, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0}

সপ্তম অবস্থানে থাকা ২ টি একটি ঘরে এই ওভারল্যাপটি দেখায় (দ্বিতীয় সারিতে নীচে, বাম থেকে তৃতীয় কলাম)। কারণ আমরা ওভারল্যাপ চাই না, আমাদের প্রয়োজন হবে যে কোনও বৈধ সমাধানে ভেক্টরগুলির যোগফলের 1 এর বেশি হওয়া উচিত না।

দেখা যাচ্ছে যে এই সমস্যার জন্য, টাইলগুলির জন্য ওরিয়েন্টেশন এবং অবস্থানের 29 টি সংমিশ্রণ সম্ভব। (এটি একটি বিস্তৃত অনুসন্ধানের সাথে জড়িত একটি সহজ বিট কোডিংয়ের সাথে পাওয়া গেছে)) আমরা সমস্ত 29 সম্ভাব্য চিত্রগুলি কলামের ভেক্টর হিসাবে তাদের সূচকগুলি অঙ্কন করে চিত্রিত করতে পারি । (সারিগুলির পরিবর্তে কলামগুলি ব্যবহার করা প্রচলিত)) এখানে ফলাফল প্রাপ্ত অ্যারের একটি চিত্র দেওয়া হয়েছে, এতে 16 টি সারি থাকবে (আয়তক্ষেত্রের প্রতিটি সম্ভাব্য কক্ষের জন্য একটি) এবং 29 টি কলাম থাকবে:

makeAllTiles[tile_, {n_Integer, m_Integer}] := 
  With[{ m0 = Length[tile], n0 = Length[First[tile]]},
   Flatten[
    Table[ArrayPad[tile, {{i, m - m0 - i}, {j, n - n0 - j}}],  {i, 0, m - m0}, {j, 0, n - n0}], 1]];
allTiles = Flatten[ParallelMap[makeAllTiles[#, ImageDimensions[regionImage]] & , tiles], 1];
allTiles = Parallelize[
   Select[allTiles, (regionVector . Flatten[#]) >= (Plus @@ (Flatten[#])) &]];
options = Transpose[Flatten /@ allTiles];

চিত্র 4: বিকল্প অ্যারে

(পূর্ববর্তী দুটি সূচক ভেক্টর বাম দিকে প্রথম দুটি কলাম হিসাবে উপস্থিত হবে)) তীক্ষ্ণ চোখের পাঠক সমান্তরাল প্রক্রিয়াকরণের বেশ কয়েকটি সুযোগ লক্ষ্য করেছেন: এই গণনাগুলি কয়েক সেকেন্ড সময় নিতে পারে।

পূর্ববর্তী সমস্তগুলি ম্যাট্রিক্স স্বরলিপি ব্যবহার করে নিখুঁতভাবে পুনঃস্থাপন করা যেতে পারে:

  • এম হ'ল সারি এবং এন কলাম সহ এফ বিকল্পগুলির এই অ্যারে ।

  • এক্স দৈর্ঘ্য এন এর টাইল স্থাপনের একটি সেটের সূচক ।

  • বি হল একটি এন- ভেক্টর।

  • আর এই অঞ্চলের জন্য সূচক; এটি একটি এম- ভেক্টর।

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

সীমাবদ্ধতার হয় যে

  1. এক্স এর সমস্ত উপাদান অবশ্যই অ-নেতিবাচক হতে হবে;

  2. এক্স এর সমস্ত উপাদানগুলি 1 এর চেয়ে কম হওয়া উচিত (যা খ এর সাথে সম্পর্কিত এন্ট্রি );

  3. এক্স এর সমস্ত উপাদান অবশ্যই অবিচ্ছেদ্য হতে হবে।

(1) এবং (2) সীমাবদ্ধতাগুলি এটি একটি রৈখিক প্রোগ্রাম করে , তৃতীয় প্রয়োজনীয়তা এটিকে পূর্ণসংখ্যায় পরিণত করে লিনিয়ার প্রোগ্রামে পরিণত করে।

ঠিক এই ফর্মটিতে প্রকাশিত পূর্ণসংখ্যার লিনিয়ার প্রোগ্রামগুলি সমাধান করার জন্য অনেকগুলি প্যাকেজ রয়েছে । তারা এম এবং এন এর মান দশকে বা কয়েক হাজারেও পরিচালনা করতে সক্ষম । কিছু বাস্তব-বিশ্বের অ্যাপ্লিকেশনগুলির জন্য এটি সম্ভবত যথেষ্ট ভাল।


আমাদের প্রথম উদাহরণ হিসাবে, আমি ম্যাথমেটিক 8 এর LinearProgrammingকমান্ড ব্যবহার করে পূর্ববর্তী উদাহরণের জন্য একটি সমাধান গণনা করেছি । (এটি একটি লিনিয়ার অবজেক্টিভ ফাংশনকে ন্যূনতম করে দেবে। বস্তুনিষ্ঠ ফাংশনটিকে উপেক্ষা করে ন্যূনতমকরণ সহজেই সর্বাধিককরণের দিকে পরিণত হয়)) এটি 0.011 সেকেন্ডে একটি সমাধান (টাইলস এবং তাদের অবস্থানের তালিকা হিসাবে) ফিরে এলো:

b = ConstantArray[-1, Length[options]];
c = -Flatten[region].options;
lu = ConstantArray[{0, 1}, Length[First[options]]];
x = LinearProgramming[c, -options, b, lu, Integers, Tolerance -> 0.05];
If[! ListQ[x] || Max[options.x] > 1, x = {}];
solution = allTiles[[Select[x Range[Length[x]], # > 0 &]]];

চিত্র 5: সমাধান

ধূসর কোষগুলি এই অঞ্চলে মোটেই নেই; সাদা কোষগুলি এই সমাধান দ্বারা আচ্ছাদিত করা হয়নি।

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

দ্বিতীয় চিত্রণ হিসাবে , আরও বাস্তববাদী হতে, আসুন প্রশ্নে অঞ্চলটি বিবেচনা করুন। চিত্রটি আমদানি করে এবং এটি পুনরায় মডেল করে আমি এটি 69 বাই 81 গ্রিড দিয়ে উপস্থাপন করেছি:

চিত্র 6: অঞ্চল

অঞ্চলটিতে এই গ্রিডের 2156 টি কক্ষ রয়েছে।

জিনিসগুলিকে আকর্ষণীয় করে তোলার জন্য, এবং রৈখিক প্রোগ্রামিং সেটআপটির সাধারণতা চিত্রিত করতে, আসুন দুই প্রান্তের আয়তক্ষেত্র দিয়ে যতটা সম্ভব এই অঞ্চলটিকে কভার করার চেষ্টা করি :

চিত্র 7: টাইলস

একটি 17 বাই 9 (153 কোষ) এবং অন্যটি 15 বাই 11 (165 কোষ)। আমরা দ্বিতীয়টি ব্যবহার করতে পছন্দ করতে পারি, কারণ এটি বৃহত্তর, তবে প্রথমটি ত্বকযুক্ত এবং আরও শক্ত জায়গায় ফিট করতে পারে। দেখা যাক!

প্রোগ্রামে এখন এন = 5589 টি সম্ভাব্য টাইল স্থাপন করা জড়িত । এটি মোটামুটি বড়! গণনার 6.3 সেকেন্ড পরে, ম্যাথমেটিকা এই দশ-টাইল সমাধান নিয়ে এল:

চিত্র 8: সমাধান

কিছুটা স্ল্যাকের কারণে ( .eg, আমরা নীচে বাম টাইলটি চারটি কলাম পর্যন্ত তার বামে স্থানান্তরিত করতে পারি), সম্ভবত এই কয়েকটি থেকে কিছুটা পৃথক পৃথক সমাধান রয়েছে।


1
এই সমাধান (কিন্তু বেশ ভাল হিসাবে) এর পূর্ববর্তী সংস্করণ উপস্থিত হয় ম্যাথামেটিকাল এ সাইটে mathematica.stackexchange.com/a/6888 । এটি লক্ষণীয়ও হতে পারে যে, গঠনের একটি সামান্য প্রকরণটি যতটা সম্ভব কয়েকটি টাইল দিয়ে অঞ্চলটিকে পুরোপুরি coveringেকে দেওয়ার সমস্যাটি সমাধান করতে ব্যবহার করা যেতে পারে (অবশ্যই কিছু ওভারল্যাপের অনুমতি দেওয়া): এটি "পোথোল প্যাচিং" সমাধান করবে সমস্যা।
whuber

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

দুর্দান্ত প্রচেষ্টা এবং উত্তর। ক্রিসের উত্তরটিও সহায়ক ছিল। সাহায্যের জন্য সবাইকে ধন্যবাদ! কাজ করে, এবং আমাকে আবার সঠিক দিকে চালিত করল।
থাদ

কি দারুন! আমি একই রকম সমস্যায় আগ্রহী ছিলাম এবং এই পোস্টটি আমাকে নতুন দৃষ্টিভঙ্গি দিয়েছে। ধন্যবাদ. আর যদি বড় হয় (উদাহরণস্বরূপ 140x140-20000), গণনার ব্যয় হ্রাস করার কোনও উপায় আছে কি? আপনি কি এই সমস্যা সম্পর্কিত কোনও কাগজপত্র জানেন? আমার অনুসন্ধানের কীওয়ার্ডগুলি আমাকে সঠিক উপায়ে নেতৃত্ব দেয় না (এখন অবধি)।
নিমক্যাপ

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

5

প্যালিগনসের প্যাকিংয়ের জন্য অন জেনেটিক অ্যালগরিদমসের লিঙ্কটি , ন্যূনতম ব্যবধানে সীমাবদ্ধ ক্ষেত্রের মধ্যে সর্বাধিক সংখ্যক পয়েন্ট রাখার জন্য অ্যালগরিদম সিকিংয়ে অনুরূপ প্রশ্নের আমার উত্তরে প্রদত্ত ? , দরকারী হতে পারে। মনে হচ্ছে পদ্ধতিটি সাধারণভাবে ধারক আকার (এবং কেবল আয়তক্ষেত্র নয়) দিয়ে কাজ করার জন্য সাধারণ করা যেতে পারে।


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

2

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

দৈর্ঘ্যের L এর পাশ দিয়ে একটি বর্গক্ষেত্র ধরুন

স্কোয়ারগুলির একটি চেকবোর্ড প্যাটার্ন তৈরি করুন, যা ধারকটির সীমাগুলির মাত্রার কমপক্ষে কমপক্ষে প্রতিটি দিকে কমপক্ষে 1L থাকে।

এন = 0

ডিএক্স = 0

ডিওয়াই = 0

ডিআর = 0

চেকবোর্ডের অবস্থানটি মূল সেন্ট্রয়েডে পুনরায় সেট করুন

এর জন্য (আর = 1: 100)

এর জন্য (Y = 1: 100)

এর জন্য (এক্স = 1: 100)

এম = সম্পূর্ণ ধারকগুলির মধ্যে বর্গক্ষেত্রের সংখ্যা গণনা করুন

যদি (এম> এন)

ডিআর = আর

ডিওয়াই = ওয়াই

DX = এক্স

এন = m

এল / 100 দ্বারা চেকবোর্ড পূর্ব দিকে সরান

পূর্বে চেকবোর্ড পুনরায় সেট করুন

এল / 100 দ্বারা চেকবোর্ড উত্তরে সরান

চেকবোর্ড নোথিং রিসেট করুন

চেকারবোর্ডটিকে তার সেন্ট্রয়েডের চারদিকে 3.6 ডিগ্রি সিডব্লু ঘোরান

ডিওয়াই = ডিওয়াই * এল

ডিএক্স = ডিএক্স * এল

আসল অবস্থান এবং আবর্তনে চেকারবোর্ডটি পুনরায় সেট করুন

মুদ্রণ ডিআর & "," এবং ডিএক্স & ", এবং" এবং ডিওয়াই এবং "হ'ল চূড়ান্ত অনুবাদ / ঘূর্ণন ম্যাট্রিক্স"

ডিআর দ্বারা চেকারবোর্ড ঘোরান

ডিএক্স, ডিওয়াই দ্বারা চেকবোর্ড অনুবাদ করুন

স্কোয়ারগুলি নির্বাচন করুন যা সম্পূর্ণ পাত্রে থাকে

স্কয়ার রফতানি করুন


যদি আপনি একটি দীর্ঘ প্রান্তের মাঝখানে একটি ঘর অনুপস্থিত একটি 2 বাই 5 অঞ্চলে এই পদ্ধতিটি ব্যবহার করে দেখেন তবে আপনি দেখতে পাবেন যে এটির মধ্যে কেবল একটি 2 বাই 2 বর্গ রাখতে পারবেন। তবে এ জাতীয় দুটি স্কোয়ার সহজেই মাপসই হয়। সমস্যাটি হ'ল তারা নিয়মিত "চেকারবোর্ড" প্যাটার্নের অংশ নয়। এই সমস্যাটি এমন একটি বিষয় যা এই সমস্যাটিকে মোটামুটি শক্ত করে তোলে।
whuber

1
হা. আপনার যদি ধারক আকারের যথেষ্ট পরিমাণে অনিয়মিত হয় যে এটি প্রতিটি কয়েকটি কোষের ক্রম অনুসারে একাধিক বিতর্কিত নিয়মিত নিদর্শনগুলিকে সমর্থন করতে পারে তবে এটি সর্বোত্তম থেকে খুব দূরে শেষ। সম্ভাবনার জায়গার মতো জিনিসগুলি যুক্ত করার ফলে প্রক্রিয়াজাতকরণের সময় খুব দ্রুত বৃদ্ধি পায় এবং আপনি যে নির্দিষ্ট ক্ষেত্রে টার্গেট করছেন তার জন্য একটি নির্দিষ্ট ডিগ্রির পরিকল্পনা প্রয়োজন planning
ম্যাপিংটন আগামীকাল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.