ওয়েব সমস্যাটি মোকাবেলা করে আপনি একটি নিয়ম ইঞ্জিন তৈরি করতে পারেন যেখানে প্রতিটি নির্দিষ্ট নিয়ম স্বাধীনভাবে কোড করা হয়। এর আরও সংশোধন হ'ল নিয়ম তৈরি করতে একটি ডোমেন নির্দিষ্ট ভাষা (ডিএসএল) তৈরি করা হবে, তবে ডিএসএল একা কেবল একটি কোড বেস (মূল) থেকে অন্য (ডিএসএল) এ সমস্যাটি স্থানান্তর করে। কাঠামো ছাড়াই ডিএসএল স্থানীয় ভাষার (জাভা, সি # ইত্যাদি) এর চেয়ে ভাল কোনও মূল্য দিতে পারে না, সুতরাং আমরা উন্নত কাঠামোগত পদ্ধতির সন্ধান করার পরে এটিতে ফিরে আসব।
মূল সমস্যাটি হ'ল আপনার একটি মডেলাইজেশনের সমস্যা হচ্ছে having যখনই আপনি এর মতো সংযুক্ত পরিস্থিতিগুলির মুখোমুখি হন তবে এটি একটি স্পষ্ট লক্ষণ যে আপনার মডেল বিমূর্তন যা পরিস্থিতি বর্ণনা করে তা অত্যন্ত মোটা। আপনি সম্ভবত এমন উপাদানগুলিকে একত্রিত করছেন যা একক সত্তায় বিভিন্ন মডেলের অন্তর্ভুক্ত।
যদি আপনি আপনার মডেলটিকে ভেঙে ফেলতে থাকেন তবে আপনি শেষ পর্যন্ত এই সংযুক্তি প্রভাবটি সম্পূর্ণরূপে দ্রবীভূত করবেন। যাইহোক এই পথটি নেওয়ার সময় আপনার ডিজাইনে হারিয়ে যাওয়া আরও আরও বড় জগাখিচুড়ি তৈরি করা সহজ, এখানে পারফেকশনিজম অগত্যা আপনার বন্ধু নয়।
সীমাবদ্ধ রাষ্ট্রীয় মেশিন এবং নিয়ম ইঞ্জিনগুলি কীভাবে এই সমস্যাটিকে ভেঙে আরও পরিচালনাযোগ্য করা যায় তার একটি উদাহরণ। এখানে মূল ধারণাটি হ'ল এই জাতীয় মিশ্র সমস্যা থেকে মুক্তি পাওয়ার একটি ভাল উপায় হ'ল প্রায়শই একটি ডিজাইন তৈরি করা হয় এবং আপনার সিস্টেমটি সন্তোষজনকভাবে সঞ্চালন না করা অবধি বিমূর্ততার স্তরের স্তরে অ্যাড-ন্যাসাম পুনরাবৃত্তি করা । জটিল কীভাবে নিখুঁত নিদর্শন তৈরি করতে ফ্র্যাক্টালগুলি ব্যবহৃত হয় তা আকিন। আপনি যদি নিজের সিস্টেমে একটি মাইক্রোস্কোপ দিয়ে দেখেন বা একটি উচ্চ পাখির চোখের দর্শন থেকে যান তবে নিয়মগুলি একই রকম নয়।
এটি আপনার ডোমেনে প্রয়োগ করার উদাহরণ।
আপনি কীভাবে গরু ভূখণ্ডের মধ্যে দিয়ে চলেছেন তা আপনি মডেল করার চেষ্টা করছেন। যদিও আপনার প্রশ্নের বিশদের অভাব রয়েছে আমি অনুমান করব যে আপনার প্রচুর পরিমাণে ifs এর মধ্যে সিদ্ধান্তের খণ্ড অন্তর্ভুক্ত রয়েছে if cow.isStanding then cow.canRun = true
তবে উদাহরণস্বরূপ আপনি ভূখণ্ডের বিশদ যুক্ত করার সাথে সাথে আপনি বিরক্ত হন। সুতরাং আপনি যে পদক্ষেপ নিতে চান তার জন্য আপনাকে ভাবতে পারে এমন প্রতিটি দিক যাচাই করতে হবে এবং পরবর্তী সম্ভাব্য ক্রিয়াটির জন্য এই যাচাইকরণগুলি পুনরাবৃত্তি করতে হবে।
প্রথমে আমাদের আমাদের পুনরাবৃত্তিযোগ্য নকশাগুলি দরকার যা সেক্ষেত্রে সিমুলেশনের পরিবর্তিত রাজ্যগুলির মডেল করার জন্য এফএসএম হবে। সুতরাং আমি প্রথমে যা করব তা হল একটি রেফারেন্স এফএসএম প্রয়োগ করা, একটি রাষ্ট্রীয় ইন্টারফেস, একটি স্থানান্তর ইন্টারফেস এবং সম্ভবত একটি রূপান্তর প্রসঙ্গেএতে অন্য দু'জনের কাছে উপলব্ধ করার জন্য ভাগ করা তথ্য থাকতে পারে। একটি মৌলিক এফএসএম বাস্তবায়ন প্রসঙ্গ নির্বিশেষে এক স্থানান্তর থেকে অন্যটিতে চলে যাবে, এখানেই কোনও নিয়ম ইঞ্জিন আসে the ট্রানজিশনটি ঘটতে থাকলে নিয়ম ইঞ্জিনটি পরিপূর্ণভাবে আবশ্যক যে শর্তগুলি পূরণ করতে হবে enc এখানে একটি নিয়ম ইঞ্জিন নিয়মের তালিকার মতো সহজ হতে পারে প্রতিটি বুলিয়ান ফেরত মূল্যায়ন করার কাজ করে। কোনও রূপান্তরটি আমাদের স্থাপন করা উচিত কিনা তা পরীক্ষা করতে, নিয়মের তালিকাটি পুনরাবৃত্তি করুন এবং তাদের মধ্যে যদি কোনওটি মিথ্যা হিসাবে মূল্যায়ন করে তবে রূপান্তর ঘটে না। রূপান্তরটি নিজেই FSM (এবং অন্যান্য সম্ভাব্য কার্যাদি) এর বর্তমান অবস্থা সংশোধন করার জন্য আচরণগত কোড ধারণ করবে ।
এখন, যদি আমি ODশ্বরের স্তরে একক বৃহত এফএসএম হিসাবে সিমুলেশনটি প্রয়োগ করতে শুরু করি তবে আমি প্রচুর সম্ভাব্য রাজ্যগুলি, ট্রানজিশন ইত্যাদির সাথে শেষ করে দিই if যদি অন্য কোনও জগাখিচুড়ি মনে হয় তবে এটি ঠিক আছে তবে এটি কেবল চারপাশে ছড়িয়ে গেছে: প্রতিটি আইএফ এখন একটি নিয়ম যা প্রসঙ্গে একটি নির্দিষ্ট তথ্যের বিরুদ্ধে পরীক্ষা করে (যা এই মুহুর্তে সমস্ত কিছু ধারণ করে) এবং প্রতিটি আইডি যদি কোথাও স্থানান্তর কোডে থাকে।
ফ্র্যাক্টাল ব্রেকডাউন প্রবেশ করান: প্রথম পদক্ষেপটি প্রতিটি গাভীর জন্য একটি এফএসএম তৈরি করা হবে যেখানে রাজ্যগুলি গরুর নিজস্ব অভ্যন্তরীণ রাজ্য (দাঁড়ানো, চলমান, হাঁটা, চারণ ইত্যাদি) এবং তাদের মধ্যে স্থানান্তর পরিবেশ দ্বারা প্রভাবিত হবে। এটি সম্ভব যে গ্রাফটি সম্পূর্ণ নয়, উদাহরণস্বরূপ, চারণ শুধুমাত্র স্থায়ী অবস্থা থেকে অ্যাক্সেসযোগ্য, অন্য কোনও রূপান্তরকে অস্বীকার করা হয় কারণ কেবল মডেল থেকে অনুপস্থিত। এখানে আপনি কার্যকরভাবে দুটি ভিন্ন মডেল, গরু এবং ভূখণ্ডে ডেটা আলাদা করুন। এর প্রত্যেকটির নিজস্ব সম্পত্তি সেট রয়েছে। এই ব্রেকডাউন আপনাকে আপনার সামগ্রিক ইঞ্জিন ডিজাইনকে সহজ করার অনুমতি দেবে। এখন একক নিয়ম ইঞ্জিনের পরিবর্তে আপনার একাধিক, সরল নিয়ম ইঞ্জিন (প্রতিটি ট্রানজিশনের জন্য একটি) রয়েছে যা খুব নির্দিষ্ট বিশদ সম্পর্কে সিদ্ধান্ত নিয়েছে তা স্থির করে।
কারণ আমি এফএসএমের জন্য একই কোডটি পুনরায় ব্যবহার করছি এটি মূলত এফএসএমের একটি কনফিগারেশন। মনে আছে আমরা কখন এর আগে ডিএসএলের উল্লেখ করেছি? এখানে আপনার বিধি ও ট্রানজিশন লেখার জন্য ডিএসএল অনেক ভাল করতে পারে।
আরও গভীরে যাচ্ছি
এখন theশ্বরকে গরুর অভ্যন্তরীণ রাজ্যগুলি পরিচালনার ক্ষেত্রে সমস্ত জটিলতার মোকাবেলা করতে হবে না, তবে আমরা এটিকে আরও এগিয়ে নিতে পারি। উদাহরণস্বরূপ ভূখণ্ড পরিচালনায় এখনও অনেক জটিলতা জড়িত। এখানেই আপনি সিদ্ধান্ত নেবেন যেখানে ব্রেকডাউন যথেষ্ট। যদি আপনার ODশ্বরের উদাহরণস্বরূপ আপনি ভূখণ্ডের গতিবিদ্যা (দীর্ঘ ঘাস, কাদা, শুকনো কাদা, সংক্ষিপ্ত ঘাস ইত্যাদি) পরিচালনা করেন তবে আমরা একই প্যাটার্নটির পুনরাবৃত্তি করতে পারি। সমস্ত ভূখণ্ডের রাজ্যগুলি (দীর্ঘ ঘাস, সংক্ষিপ্ত ঘাস, কর্দমাক্ত, শুকনো ইত্যাদি) রাজ্যগুলির মধ্যে রূপান্তর এবং সম্ভবত সাধারণ নিয়মের সাথে একটি নতুন ভূখণ্ড এফএসএম-তে বের করে এই অঞ্চলটিকে যুক্ত করার কোনও কিছুই আপনাকে রোধ করতে পারে না। উদাহরণস্বরূপ কাঁচা অবস্থায় যেতে নিয়ম ইঞ্জিনের তরলগুলি সন্ধানের জন্য প্রসঙ্গটি পরীক্ষা করা উচিত, অন্যথায় এটি সম্ভব নয়। এখন শ্বর আরও সহজ সরল হয়েছেন।
আপনি এফএসএম সিস্টেমটি স্বায়ত্তশাসিত করে তাদের সম্পূর্ণ করতে পারেন এবং প্রতিটিকে একটি থ্রেড দিতে পারেন। এই শেষ পদক্ষেপটি প্রয়োজনীয় নয় তবে এটি আপনাকে কীভাবে আপনার সিদ্ধান্ত গ্রহণের প্রতিনিধিত্ব করে (একটি বিশেষায়িত এফএসএম চালু করে বা কেবলমাত্র একটি প্রাক-নির্ধারিত রাষ্ট্র ফিরিয়ে দেয়) সামঞ্জস্য করে সিস্টেমের মিথস্ক্রিয়াটিকে পরিবর্তনশীল করতে দেয়।
মনে রাখবেন কীভাবে আমরা উল্লেখ করেছি যে রূপান্তরগুলি "অন্যান্য সম্ভাব্য কাজগুলি "ও করতে পারে? আসুন এক্সপ্লোর করুন যে বিভিন্ন মডেলের (এফএসএম) একে অপরের সাথে যোগাযোগের সম্ভাবনা যুক্ত করে। আপনি ইভেন্টের একটি সেট সংজ্ঞায়িত করতে পারবেন এবং প্রতিটি এফএসএমকে এই ইভেন্টগুলির শ্রোতার নিবন্ধভুক্ত করতে পারবেন। সুতরাং, উদাহরণস্বরূপ, যদি কোনও গরু একটি ভূখণ্ডের হেক্সে প্রবেশ করে, হেক্সটি স্থানান্তর পরিবর্তনের জন্য শ্রোতাদের নিবন্ধন করতে পারে। এখানে এটি কিছুটা জটিল হয়ে ওঠে কারণ প্রতিটি এফএসএম নির্দিষ্ট ডোমেনটিকে আশ্রয় করে না এমন কোনও জ্ঞান ছাড়াই খুব উচ্চ স্তরে প্রয়োগ করা হয়। তবে আপনি গরুটিকে ইভেন্টের একটি তালিকা প্রকাশের মাধ্যমে এটি অর্জন করতে পারেন এবং সেল যদি এটিতে প্রতিক্রিয়া দেখাতে পারে এমন ইভেন্টগুলি দেখে তবে রেজিস্ট্রেশন করতে পারে। এখানে ইভেন্ট পরিবারের একটি হায়ারার্কি একটি ভাল বিনিয়োগ।
আপনি ঘাসের পুষ্টির স্তর এবং বৃদ্ধির চক্রকে মডেলিং করে আরও নিবিড়ভাবে ঠেলাতে পারেন, এর সাথে ... আপনি এটি অনুমান করেছিলেন ... টেরিট প্যাচের নিজস্ব মডেলে এমবেডেড একটি ঘাস এফএসএম।
যদি আপনি এই ধারণাটি যথেষ্ট পরিমাণে চালিত করেন তবে ODশ্বরের পক্ষে খুব সামান্যই কাজ রয়েছে কারণ সমস্ত দিকগুলি বেশ স্ব-পরিচালিত, আরও godশ্বরিক বিষয়গুলিতে ব্যয় করার জন্য সময় মুক্ত করে দেওয়া।
সংক্ষিপ্তবৃত্তি
এখানে এফএসএম উপরে বর্ণিত হিসাবে সমাধানটি নয়, কেবল একটি উদাহরণ বোঝানোর উপায় যে এই জাতীয় সমস্যার সমাধান প্রতি কথার কোডে পাওয়া যায় না তবে আপনি কীভাবে আপনার সমস্যার মডেল করেন। আমার এফএসএম প্রস্তাবের চেয়ে সম্ভবত আরও অনেকগুলি সমাধান সম্ভব এবং সম্ভবত বেশ ভাল। তবে এই সমস্যাটি পরিচালনা করার জন্য "ফ্র্যাক্টালস" পদ্ধতিটি একটি ভাল উপায়। যদি সঠিকভাবে সম্পন্ন করা হয় তবে আপনি গভীরতর স্তরগুলি বরাদ্দ করতে পারেন যেখানে এটি গুরুত্বপূর্ণ যেখানে সরল মডেলগুলি তার চেয়ে কম গুরুত্বপূর্ণ। সংস্থানগুলি আরও উপলভ্য হয়ে গেলে আপনি পরিবর্তনগুলি সারি করতে এবং সেগুলি প্রয়োগ করতে পারেন। অ্যাকশন সিকোয়েন্সে গাভী থেকে ঘাসের প্যাচে পুষ্টি স্থানান্তর গণনা করা এত গুরুত্বপূর্ণ নয়। তবে আপনি এই ট্রানজিশনগুলি রেকর্ড করতে পারেন এবং পরবর্তী সময়ে পরিবর্তনগুলি প্রয়োগ করতে পারেন বা নিয়মিত ইঞ্জিনগুলি প্রতিস্থাপন করে বা সম্ভবত FSM বাস্তবায়ন পুরোপুরি প্রতিস্থাপনের মাধ্যমে এফএসএম বাস্তবায়ন সম্পূর্ণরূপে প্রতিস্থাপন করতে পারেন যেগুলি সরাসরি ক্ষেত্রের মধ্যে নেই are আগ্রহের (ক্ষেত্রের অপর প্রান্তে সেই গাভী) আরও বিস্তারিত কথোপকথনকে ফোকাস এবং সংস্থানগুলির বৃহত্তর অংশ পেতে দেয়। সামগ্রিকভাবে সিস্টেমে পুনর্বিবেচনা ছাড়াই এগুলি; যেহেতু প্রতিটি অংশ ভালভাবে বিচ্ছিন্ন, আপনার মডেলটির গভীরতা সীমাবদ্ধ বা প্রসারিত করে একটি ড্রপ-ইন প্রতিস্থাপন তৈরি করা সহজ হয়ে যায়। স্ট্যান্ডার্ড ডিজাইন ব্যবহার করে আপনি এটি তৈরি করতে পারেন এবং ডিএসএল হিসাবে নিয়ম বা ইভেন্টগুলির জন্য একটি স্ট্যান্ডার্ড ভোকাবুলারি সংজ্ঞায়িত করার জন্য অ্যাড-হক সরঞ্জামগুলিতে করা বিনিয়োগকে সর্বাধিক করে তুলতে পারেন, আবার খুব উচ্চ স্তরের থেকে শুরু করে এবং প্রয়োজনীয় সংশোধন যোগ করতে পারেন। যেহেতু প্রতিটি অংশ ভালভাবে বিচ্ছিন্ন, আপনার মডেলটির গভীরতা সীমাবদ্ধ বা প্রসারিত করে একটি ড্রপ-ইন প্রতিস্থাপন তৈরি করা সহজ হয়ে যায়। স্ট্যান্ডার্ড ডিজাইন ব্যবহার করে আপনি এটি তৈরি করতে পারেন এবং ডিএসএল হিসাবে নিয়ম বা ইভেন্টগুলির জন্য একটি স্ট্যান্ডার্ড ভোকাবুলারি সংজ্ঞায়িত করার জন্য অ্যাড-হক সরঞ্জামগুলিতে করা বিনিয়োগকে সর্বাধিক করে তুলতে পারেন, আবার খুব উচ্চ স্তরের থেকে শুরু করে এবং প্রয়োজনীয় সংশোধন যোগ করতে পারেন। যেহেতু প্রতিটি অংশ ভালভাবে বিচ্ছিন্ন, আপনার মডেলটির গভীরতা সীমাবদ্ধ বা প্রসারিত করে একটি ড্রপ-ইন প্রতিস্থাপন তৈরি করা সহজ হয়ে যায়। স্ট্যান্ডার্ড ডিজাইন ব্যবহার করে আপনি এটি তৈরি করতে পারেন এবং ডিএসএল হিসাবে নিয়ম বা ইভেন্টগুলির জন্য একটি স্ট্যান্ডার্ড ভোকাবুলারি সংজ্ঞায়িত করার জন্য অ্যাড-হক সরঞ্জামগুলিতে করা বিনিয়োগকে সর্বাধিক করে তুলতে পারেন, আবার খুব উচ্চ স্তরের থেকে শুরু করে এবং প্রয়োজনীয় সংশোধন যোগ করতে পারেন।
আমি একটি কোড উদাহরণ সরবরাহ করব তবে এই মুহুর্তে আমি যা করতে পারি তা কেবল এটিই।