প্রথমত, আমাদের সর্বোত্তম সংজ্ঞা দেওয়া দরকার । যেহেতু আপনি যাকে অনুকূল বিবেচনা করছেন তা আপনি বলছেন না, বেশিরভাগ লোকেরা চতুর্ভুজীয় অভিব্যক্তিটি চয়ন করে। উদাহরণস্বরূপ, ধরুন আপনার বর্তমান যৌথ কোণগুলি ভেক্টর দ্বারা দেওয়া হয়েছেα⃗ । আমরা ত্রুটি সহ প্রয়োজনীয় গতিবিধি হ্রাস করতে বিবেচনা করতে পারিx⃗ =α⃗ −α⃗ start, আপনি একটি ব্যয় ফাংশন সংজ্ঞায়িত করতে পারেন J=x⃗ TQx⃗ কিছু ম্যাট্রিক্স জন্য প্রশ্নঃ। আমরা সাধারণত একটি তির্যক ম্যাট্রিক্স ব্যবহার করি তবে কোনও ধনাত্মক-নির্দিষ্ট ম্যাট্রিক্স তা করবে।
দুটি যৌথ কোণ সহ সরল উদাহরণে, যৌথ হলে একটি একটি সস্তা মোটর ছিল (সম্ভবত শেষ-প্রভাবশালী এর কাছাকাছি), আমাদের একটি ব্যয় কার্য থাকতে পারে
জে= [এক্সএকটিএক্সখ] [1002] [এক্সএকটিএক্সখ]অর্থাৎ। যৌথ আন্দোলনখ যৌথ হিসাবে দ্বিগুণ ব্যয়বহুল একটি।
এখন, গতিময় সমীকরণটি একটি ম্যাট্রিক্স সূত্র এবং ডেনাভিট-হার্টেনবার্গে স্বরলিপিটি হতে পারে:
Πটিআমি=⎡⎣⎢⎢⎢100001000010এক্সYz- র1⎤⎦⎥⎥⎥, যেখানে ডানদিকে অবস্থানটি প্রতিনিধিত্ব করে ( x , y), জেড) এবং অরিয়েন্টেশন (বর্তমানে শূন্য ঘূর্ণন হিসাবে সেট করা হয়েছে), যৌথ কোণগুলি দেওয়া।
যেহেতু আমরা অভিমুখীকরণ এবং শুধুমাত্র অবস্থানের বিষয়ে চিন্তা করি না তাই আমরা সর্বশেষ রূপান্তর ম্যাট্রিক্সের প্রথম 3 টি কলাম এবং প্রথম রূপান্তর ম্যাট্রিক্সের শেষ সারিটি কেটে ফেলতে পারি। আমরা সমানভাবে এই সূত্রটি প্রকাশ করতে পারি:
⎡⎣⎢100010001000⎤⎦⎥Πটিআমি⎡⎣⎢⎢⎢0001⎤⎦⎥⎥⎥=⎡⎣⎢এক্সYz- র⎤⎦⎥
বাম হাতের গুণকে গুণিত করে আমরা তিনটি সমীকরণ পাই। পরামিতিগুলি লিনিয়ার হলে এটি সমাধান করা সহজ। যদি সমস্ত ভারপ্রাপ্ত পরিচালক লিনিয়ার অ্যাক্টিউটার হয় তবে এটি ক্ষেত্রে। এই ক্ষেত্রে, সমস্যাটি আসলে একটি চতুর্ভুজ প্রোগ্রাম । সমীকরণটি পেতে আমরা বাম হাতটি পুনরায় সাজিয়ে তুলতে পারি:
কেএক্স⃗ =⎡⎣⎢এক্সYz- র⎤⎦⎥কিছু ম্যাট্রিক্সের জন্য কে।
চতুষ্কোণ প্রোগ্রামটি এমন একটি সমস্যা যা আকারে প্রকাশ করা যেতে পারে:
কমান জে=12এক্স⃗ টিপ্রশ্নঃএক্স⃗ + +গ⃗ টিএক্স⃗
বিষযে একজনএক্স⃗ ≤খ⃗ , ইএক্স⃗ =ঘ⃗
এটি সমাধানের জন্য, আপনি ব্যবহার করতে পারেন এমন অনেকগুলি অ্যালগরিদম রয়েছে, উদাহরণস্বরূপ, অভ্যন্তরীণ পয়েন্ট, সক্রিয় সেট, ...। কেবল একটি উপযুক্ত লাইব্রেরি সন্ধান করুন এবং এটি আপনার জন্য এটি সমাধান করবে।
সমীকরণের একটি অ-লিনিয়ার সিস্টেম সমাধান করা আরও কঠিন is এটাকে বলা হয় নন-লিনিয়ার প্রোগ্রামিং , তবে আপনার যদি ঘোরানো জয়েন্ট থাকে তবে তা আপনার কাছে।
মূলত, ম্যাট্রিক্স সমীকরণের জায়গায় আপনার ননলাইনার ফাংশন রয়েছে।
কমান চ( এক্স ) বিষযে জ⃗ ( এক্স ) = 0, ছ⃗ ( x ) ≤ 0 (সীমাবদ্ধতার আরএইচএস শূন্য করার প্রয়োজনে পুনরায় ব্যবস্থা করুন)
এটি সমাধানের জন্য ব্যবহৃত অ্যালগরিদমগুলি আরও জটিল, তবে ইন্টিরির-পয়েন্ট, সিক্যুয়ালিয়াল কোয়াড্র্যাটিক প্রোগ্রামিং (এসকিউপি), অ্যাক্টিভ-সেট, ট্রাস্ট-অঞ্চল প্রতিফলিত অ্যালগরিদম অন্তর্ভুক্ত করে। স্পষ্টতই, এই অ্যালগরিদমগুলি কীভাবে কাজ করে তার ব্যাখ্যা খুব দীর্ঘ এবং আমি এটি এই উত্তরের বাইরে রেখে দেব leave এটি বলার অপেক্ষা রাখে না যে, কেবল চতুর্ভুজ প্রোগ্রামিংয়ের জন্য ব্যবহৃত অ্যালগরিদমগুলিতে পরিমাণের পরিমাণটি নিজেই একটি পুরো কোর্স হতে পারে।
সমস্যাটি সমাধান করার জন্য আপনার কেবল একটি লাইব্রেরি সন্ধান করা উচিত, একটি কার্যকর বাস্তবায়ন কোড তৈরি করতে অনেক সময় লাগবে এবং দক্ষ বাস্তবায়নগুলি একবারে 100 (বা আরও) ভেরিয়েবল পরিচালনা করতে পারে। উদাহরণস্বরূপ, যদি আপনি ম্যাটল্যাব ব্যবহার করেন, তাহলে কিভাবে ফাংশন ব্যবহার করতে উপর ডকুমেন্টেশন হয় fmincon অপ্টিমাইজেশান টুলবক্স থেকে।
এটি অনলাইনে সমাধানের জন্য, আপনি সি ++ বা অন্যান্য নেটিভ বাস্তবায়ন চাইবেন, উদাহরণস্বরূপ, এনএলপ্ট। মনে রাখবেন যে এটি মাইক্রোকন্ট্রোলার দ্রুত সমাধান করতে পারে এমন কিছু নাও হতে পারে এবং অনেক লাইব্রেরিতে অন্যান্য নির্ভরতা থাকতে পারে যা মাইক্রোকন্ট্রোলারের উপর ব্যবহার করা সহজ নয় (যেহেতু তারা কম্পিউটারের উদ্দেশ্যে)।
আপনি যদি দক্ষতা সম্পর্কে উদ্বিগ্ন না হন এবং নিজের কোডিং করতে পারেন এমন কিছু চান, তবে ধরে নিই যে বিপরীতমুখী কাইমেটিক সমস্যা সমাধানের জন্য কল করতে পারেন এমন কোনও ফাংশন রয়েছে , আপনি কেবল গ্রেডিয়েন্ট বংশোদ্ভূত পদ্ধতিটি করতে পারেন। উদাহরণস্বরূপ, ইচ্ছামতভাবে একটি এলোমেলোভাবে প্রারম্ভিক পছন্দ বেছে নেওয়া, বিপরীত সমস্যা সমাধান করুন, তারপরে ব্যয়ের ক্রিয়াটি পরীক্ষা করুন। তারপরে আপনি কীভাবে আপনার দৃষ্টিভঙ্গিটি আলাদা করতে হবে তা যাচাই করার জন্য আপনি খাঁটি বিশ্লেষণ ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি যদি আপনার বর্তমান ওরিয়েন্টেশন (যেমন একটি কিউবিক গ্রিডে 8 পয়েন্ট) এর আশেপাশে একই রকমের দিকনির্দেশগুলি পরীক্ষা করেন তবে আপনি কীভাবে প্রতিটি দিকের ক্ষেত্রে ব্যয়ের কার্যকারিতা পরিবর্তিত হয় তার দ্বিতীয় অর্ডারের সান্নিধ্য পেতে পারেন।
দ্বিতীয় অর্ডারের প্রায় অনুমান ব্যবহার করে (হেসিয়ান ম্যাট্রিক্স হিসাবে এটি পরিচিত কারণ এটি মাল্টিভারিয়েট - ত্রি-মাত্রিক দিকের জন্য), আপনি ব্যয় ফাংশনের গ্রেডিয়েন্টের শূন্য-ক্রসিংটি খুঁজে পেতে পারেন (যেমন, পূর্বাভাসিত স্থানীয় মিনিমা)।
নতুন ভবিষ্যদ্বাণীযুক্ত ওরিয়েন্টেশন সহ, কেবল এটি আবার বিপরীত দ্রাবকের মাধ্যমে রাখুন এবং নির্ভুলতা পর্যাপ্ত না হওয়া পর্যন্ত পুনরাবৃত্তি করুন।
মনে রাখবেন যে এটি সম্ভবত তেমন দক্ষ হবে না, কারণ বিপরীত গতিময় সমস্যাটি নিজেই পুনরাবৃত্তভাবে সমাধান করতে হবে (সুতরাং আপনি বারবার এমন একটি ক্রিয়া ব্যবহার করছেন যা সমাধান করতে নিজেই কিছুটা সময় নেয়)। এছাড়াও, জড়িত কোডটি একটি সম্পূর্ণ-উন্নততর অপ্টিমাইজেশনের অ্যালগরিদমের চেয়ে কম হতে পারে, তবে এটি এখনও যথেষ্ট পরিমাণে এবং সময়ের একটি তুচ্ছ বিনিয়োগ নয়।
যে কোনও পদ্ধতি ব্যবহার করে (আনুষ্ঠানিকভাবে একটি ননলাইনার প্রোগ্রাম হিসাবে সমাধান করা বা বিপরীত সমস্যা সমাধানের জন্য একটি ক্রিয়া ব্যবহার করে পুনরাবৃত্তভাবে ব্যবহার করা), একাধিক স্থানীয় মিনিমা থাকলে সমাধানটি সর্বোত্তম হতে পারে না। এই ক্ষেত্রে, আপনি বিভিন্ন পন্থা ব্যবহার করে গ্লোবাল মিনিমা সন্ধানের চেষ্টা করতে পারেন। এমনকি একটি অ-লিনিয়ার প্রোগ্রামিং সলভার সহ, আপনি প্রাথমিক মানগুলি (উদাহরণস্বরূপ, যৌথ কোণ) দিয়ে বীজ বানাবেন বলে আশা করা হবে। আপনি বিভিন্ন উপায়ে উত্পন্ন বীজ দিয়ে বারবার কোনও পদ্ধতি চালাতে পারেন:
- এলোমেলো পুনঃসূচনা (এটি এলোমেলোভাবে উত্পন্ন হয়)
- গ্রিড-ভিত্তিক
বা অন্যান্য কাস্টম পদ্ধতি।
তবে মনে রাখবেন যে অনেকগুলি মিনিমা থাকলে গ্যারান্টি দেওয়ার কোনও ভাল উপায় নেই যে আপনি বিশ্বব্যাপী মিনিমা পাবেন। আপনি কেবল আপনার সম্ভাবনাগুলি উন্নত করতে পারেন।