কীভাবে কেউ হাজার হাজার আইএফ… তদ… ELSE নিয়ম পরিচালনা করতে পারেন?


214

আমি একটি অ্যাপ্লিকেশন তৈরির বিষয়ে বিবেচনা করছি, যা এর মূল ভিত্তিতে হাজার হাজার লোককে নিয়ে ... যদি ... তবে ... বিবৃতি দেয়। অ্যাপ্লিকেশনটির উদ্দেশ্যটি কোনও প্রাকৃতিক দৃশ্যে গরু কীভাবে ঘোরাফেরা করে তা অনুমান করতে সক্ষম হওয়া। তারা সূর্য, বাতাস, খাদ্যের উত্স, হঠাৎ ঘটনা ইত্যাদি দ্বারা প্রভাবিত হয় things

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

আমি নিয়ম ইঞ্জিনগুলি সম্পর্কে কিছুটা পড়েছি, তবে তারা কীভাবে এই জটিলতাটি পেতে পারে তা আমি দেখতে পাই না।


22
আপনাকে ডিএসএল প্রোগ্রামিংয়ে নজর রাখা দরকার: en.wikedia.org/wiki/Domain-specific_language আরও আপনি সম্ভবত কিছু ডেটা চালিত মেটা বিধি ইঞ্জিন তৈরি করতে পারেন। উদাহরণস্বরূপ আপনি ডেটা থেকে মডেল তৈরি করতে পারেন (যেমন ডেটা মাইনিং কেডিডি)
ডার্ক নাইট

14
"বিশেষজ্ঞ সিস্টেম" এবং "রিটে নেট" এর জন্য গুগল; শুভকামনা
স্টিভেন এ। লো

9
শক্ত কোডে কোডটি সরান যদি / তারপরে বিবৃতিগুলি উত্স কোড থেকে বাহ্যিক ডেটাতে সিমুলেশনকে চালিত করে।
কুয়েবল

6
আমি একটি টেক্সট ফাইলে কিছু মান ছুঁড়ে দিয়েছি এবং নামগুলি সম্বলিত একটি হ্যাশম্যাপটি ব্যবহার করার জন্য একটি লুপ ব্যবহার করব।
জেমস পি।

2
ডেভিড - ১৫ টিরও বেশি উত্তর পোস্ট করা হলে প্রোগ্রামারদের প্রশ্নগুলি সিডাব্লুতে রূপান্তরিত হয়। আমরা 16 তম উত্তর কে পোস্ট করতে পারি তা নিয়ন্ত্রণ করতে পারি না।
ChrisF

উত্তর:


73

লজিক প্রোগ্রামিংয়ের ভাষা প্রোলোগ আপনি যা খুঁজছেন তা হতে পারে। আপনার সমস্যার বিবৃতিটি আমার পক্ষে যথেষ্ট উপযুক্ত নয় যা মূল্যায়নের জন্য এটি একটি উপযুক্ত ফিট কিনা তবে এটি আপনি যা বলছেন তার চেয়ে সমান similar

একটি প্রোলোগ প্রোগ্রাম প্রয়োগ করা হয় এমন তথ্য এবং বিধি নিয়ে গঠিত। এখানে একটি সাধারণ উদাহরণের নিয়মটিতে বলা আছে যে "গাভী ক্ষুধার্ত থাকলে এবং পুরানো জায়গার চেয়ে নতুন জায়গায় আরও খাবার আছে" তবে একটি গরু একটি জায়গায় চলে যায় ":

moves_to(Cow, Location) :-
  hungry(Cow),
  current_location(Cow, OldLoc),
  food_in(OldLoc, OldFood), food_in(Location, NewFood),
  NewFood > OldFood.

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

নিয়মগুলি ছাড়াও, তথ্যগুলির একটি ডাটাবেস সরবরাহ করা হয়। উপরের নিয়মগুলির সাথে কাজ করে এমন একটি সাধারণ উদাহরণ হতে পারে:

current_location(white_cow, pasture).

current_location(black_cow, barn).
hungry(black_cow).

current_location(angry_bull, forest).
hungry(angry_bull).

food_in(barn, 3).
food_in(pasture, 5).
food_in(forest, 1).

লক্ষ করুন যে হোয়াইট_কো এবং চারণভূমি ইত্যাদি রাজধানীতে লিখিত নেই। এগুলি ভেরিয়েবল নয়, তারা পরমাণু।

অবশেষে আপনি একটি জিজ্ঞাসা করুন এবং জিজ্ঞাসা করুন কী ঘটছে।

?- moves_to(white_cow, Destination).
No.
?- moves_to(black_cow, Destination).
Destination = pasture
?- moves_to(Cow, Destination).
Cow = black_cow, Destination = pasture
Cow = angry_bull, Destination = barn
Cow = angry_bull, Destination = pasture

প্রথম কোয়েরিতে জিজ্ঞাসা করা হয়েছে যে সাদা গাভীটি কোথায় স্থানান্তরিত হবে। উপরোক্ত নিয়ম এবং তথ্য প্রদত্ত, উত্তরটি হ'ল এটি আপনি কী চান তার উপর নির্ভর করে "আমি জানি না" বা "এটি সরায় না" হিসাবে ব্যাখ্যা করা যেতে পারে।

দ্বিতীয় ক্যোয়ারী জিজ্ঞাসা করে যে কালো গাভীটি কোথায় সরানো হয়েছে। এটি খেতে চারণভূমিতে চলে আসে।

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

দ্রষ্টব্য: আমি প্রোগল লেখার পরে বহু বছর হয়ে গেছে, সমস্ত উদাহরণগুলি সিন্টেক্সিকভাবে বৈধ হতে পারে না তবে ধারণাটি সঠিক হওয়া উচিত।


10
-1: আমি মনে করি না যে প্রোলোগ কখনই সঠিক উত্তর হতে পারে। হ্যাঁ, প্রোলোগে অন্যথায় নিয়মগুলি পাওয়া সহজ হতে পারে। তবে অবশ্যই আপনাকে অন্য কিছু করতে হবে। এবং এটি যাই হোক না কেন (আইও; জিইউআই, ওয়েব বিকাশ, ...) এটি প্রোলোগের সাথে ব্যথা হবে।
মার্টিন থোমা

4
পরীক্ষা করে দেখুন learnprolognow.com আর অন্য ভাষায় ভিতরে Prolog embededing অনেক সহজ তুলনায় এটি ব্যবহার করা হয় হয়
Zachary কে

@ জাচার্য: লিঙ্কটি নষ্ট হয়ে গেছে।
রেনিপেট

@ মার্টিনথোমা: আপনি কি আপনার মন্তব্য ব্যাখ্যা করতে পারবেন? প্রোলোগ আইএমএইচওর সাথে প্রধান সমস্যাগুলি হ'ল অনুসন্ধানের নিয়ন্ত্রণের একটি ঘোষণামূলক উপায় এবং ২. টাইপিংয়ের অভাব। তবে আপনার অ্যাপ্লিকেশন যদি এই দুটিয়ের উপর খুব বেশি নির্ভর করে না তবে আমি এখানে প্রোলোগ ব্যবহার করে কোনও সমস্যা দেখতে পাচ্ছি না
এসএন

139

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

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

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

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

এটি আপনার ডোমেনে প্রয়োগ করার উদাহরণ।

আপনি কীভাবে গরু ভূখণ্ডের মধ্যে দিয়ে চলেছেন তা আপনি মডেল করার চেষ্টা করছেন। যদিও আপনার প্রশ্নের বিশদের অভাব রয়েছে আমি অনুমান করব যে আপনার প্রচুর পরিমাণে ifs এর মধ্যে সিদ্ধান্তের খণ্ড অন্তর্ভুক্ত রয়েছে if cow.isStanding then cow.canRun = trueতবে উদাহরণস্বরূপ আপনি ভূখণ্ডের বিশদ যুক্ত করার সাথে সাথে আপনি বিরক্ত হন। সুতরাং আপনি যে পদক্ষেপ নিতে চান তার জন্য আপনাকে ভাবতে পারে এমন প্রতিটি দিক যাচাই করতে হবে এবং পরবর্তী সম্ভাব্য ক্রিয়াটির জন্য এই যাচাইকরণগুলি পুনরাবৃত্তি করতে হবে।

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

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

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

কারণ আমি এফএসএমের জন্য একই কোডটি পুনরায় ব্যবহার করছি এটি মূলত এফএসএমের একটি কনফিগারেশন। মনে আছে আমরা কখন এর আগে ডিএসএলের উল্লেখ করেছি? এখানে আপনার বিধি ও ট্রানজিশন লেখার জন্য ডিএসএল অনেক ভাল করতে পারে।

আরও গভীরে যাচ্ছি

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

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

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

আপনি ঘাসের পুষ্টির স্তর এবং বৃদ্ধির চক্রকে মডেলিং করে আরও নিবিড়ভাবে ঠেলাতে পারেন, এর সাথে ... আপনি এটি অনুমান করেছিলেন ... টেরিট প্যাচের নিজস্ব মডেলে এমবেডেড একটি ঘাস এফএসএম।

যদি আপনি এই ধারণাটি যথেষ্ট পরিমাণে চালিত করেন তবে ODশ্বরের পক্ষে খুব সামান্যই কাজ রয়েছে কারণ সমস্ত দিকগুলি বেশ স্ব-পরিচালিত, আরও godশ্বরিক বিষয়গুলিতে ব্যয় করার জন্য সময় মুক্ত করে দেওয়া।

সংক্ষিপ্তবৃত্তি

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

আমি একটি কোড উদাহরণ সরবরাহ করব তবে এই মুহুর্তে আমি যা করতে পারি তা কেবল এটিই।


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

-1 আমি দেখতে পাচ্ছি না কেন এটি কেবল সিদ্ধান্ত গাছের মাধ্যমে সমাধান করা যায় না? (একটি ডিএসএল এর সাথে মিলিত হয়ে মডেলটি নিয়ে যায় এবং এটিকে চালনযোগ্য কোডে পরিণত করে)?
অন্ধকার রাত

14
Vsশ্বর বনাম এফএসএম?
জন ক্রোমার্টি

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

1
এটি গেমস প্রোগ্রামিংয়ের বিশ্বে খুব সফল প্রমাণিত হয়েছে; কোনও নিয়ম বা সম্পত্তি পরিবর্তন করা এবং আচরণটি উদ্ভব হতে দেওয়া, তারপরে কীভাবে এটি আচরণ করা যায় তার সিদ্ধান্ত নেওয়ার জন্য কোনও মান পরীক্ষা করার জন্য এটি আরও দ্রুত এবং সহজ।
বেন লেগিগেরো 16'17 এ 17:36

89

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

আপনার সমস্যার প্রকৃতির উপর নির্ভর করে বাস্তব বিশ্বের মডেল করার বিভিন্ন উপায় রয়েছে। আপনার বিভিন্ন শর্তগুলি নিয়ম বা সীমাবদ্ধতায় পরিণত হতে পারে যা সিমুলেশনটিতে প্রয়োগ করা হয়। এর পরিবর্তে কোডটি দেখতে দেখতে:

if (sunLevel > 0.75) {
   foreach(cow in cows) {
       cow.desireForShade += 0.5;
   }
}
if (precipitation > 0.2) {
   foreach(cow in cows) {
       cow.desireForShelter += 0.8;
   }
}

পরিবর্তে আপনার মতো কোড থাকতে পারে:

foreach(rule in rules) {
   foreach (cow in cows) {
      cow.apply(rule);
   }
}

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

আপনার পরিস্থিতির জন্য সঠিক পন্থাটি কী তা বলা শক্ত, তবে আমি মনে করি যদি আপনি আপনার সীমাবদ্ধতাগুলি আপনার প্রোগ্রামের ইনপুট হিসাবে বিবেচনা করেন এবং কোড নয়।


4
দয়া করে বর্ণনা করুন "গরু। প্রয়োগ (নিয়ম)" কনফিগারেশন ফাইলের সাথে কাজ করে?
ক্রোমস্টার

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

2
@ ক্রোম - সরল আপনি নিয়মটি পড়বেন এবং তারপর এটি দেওয়া গাভীর জন্য প্রয়োগ করুন।
রামহাউন্ড

5
ফাইলগুলি কনফিগার করতে মুভিং করা সর্বদা একটি ভাল পদ্ধতির নয়। ম্যাজিক ডিবাগ করা কঠিন।
রিকি ক্লার্কসন

44

এটির কথা কেউ উল্লেখ করেনি, তাই আমি ভেবেছিলাম আমি এটি স্পষ্টভাবে বলব:

হাজার হাজার "যদি .. তাহলে .. অন্য" নিয়মগুলি একটি খারাপভাবে ডিজাইন করা অ্যাপ্লিকেশনটির একটি চিহ্ন।

যদিও ডোমেন নির্দিষ্ট ডেটা উপস্থাপনা এই নিয়মগুলির মতো দেখাতে পারে, আপনি কি নিশ্চিত যে আপনার প্রয়োগটি ডোমেনের নির্দিষ্ট প্রতিনিধির সাথে সাদৃশ্যপূর্ণ?


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

43
আমি ভেবেছিলাম এই প্রশ্নটির মূল বিষয়। ওপিতে তার ডোমেনটির সাথে সম্পর্কিত একটি সমস্যা রয়েছে যা নিরপেক্ষ বাস্তবায়নে হাজার হাজার প্রয়োজন হয় ... তবে ... অন্যথায়। তার একটি অন্তর্দৃষ্টি ছিল যে এটি সমস্যাযুক্ত হতে পারে এবং এটি করার আরও ভাল উপায় সম্পর্কে এখানে সম্প্রদায়কে জিজ্ঞাসাবাদ করেছিল। যে প্রশ্নটি জিজ্ঞাসা করা হয়েছিল তা হ'ল একটি ভাল গাওয়া যা এটি ইতিমধ্যে বোঝা গিয়েছিল, আপনার উত্তরটি সঠিক হলেও এটি কোনওভাবেই প্রশ্নটিকে সহায়তা করে না।
নিউটোপিয়ান

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

আমি সম্মত, আপনি যদি বহুকর্ম পাশাপাশি ডিআই এর সাথে প্রতিস্থাপন করতে পারেন। যদি আপনার আরও কয়েক মিলিয়ন থাকে তবে আপনার নকশাটি খুব খারাপ।
দার্থভেদার

17

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

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


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

13

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

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


11

হঠাৎ আমার উপর তা প্রকাশ হয়ে গেল:

আপনাকে ডিসিশন লার্নিং ট্রি (আইডি 3 অ্যালগরিদম) ব্যবহার করতে হবে ।

কেউ সম্ভবত এটি আপনার ভাষায় প্রয়োগ করেছে Its যদি না হয় আপনি একটি বিদ্যমান লাইব্রেরি পোর্ট করতে পারেন


উপরে দেওয়া ডিএসএল ধারণাটি নিয়ে যান। প্রতীকী বীজগণিতের কোনও রূপে কীভাবে সমস্যাটিকে বিমূর্ত করা যায় তা বোঝার চেষ্টা করুন, তারপরে এটি প্রয়োগ করুন।
জ্যাচারি কে

11

এটি অন্যান্য সম্প্রদায়ের উইকি উত্তরগুলির আরও বেশি, অন্যান্য উত্তরগুলির দ্বারা প্রস্তাবিত বিভিন্ন মডেলিং সরঞ্জামগুলিকে একত্রিত করে, আমি কেবলমাত্র সংস্থানগুলিতে অতিরিক্ত লিঙ্ক যুক্ত করেছি।

আমি মনে করি না যে পুনরায় সেট করার কোনও দরকার নেই যে আপনি / অন্য বিবৃতিগুলি দিয়ে হাজার হাজার হার্ড-কোডডের জন্য আলাদা পদ্ধতির ব্যবহার করা উচিত।


9

প্রতিটি বৃহত অ্যাপ্লিকেশনটিতে হাজার হাজার if-then-elseস্টেটমেন্ট থাকে, অন্য প্রবাহ নিয়ন্ত্রণগুলি গণনা করা হয় না এবং এই অ্যাপ্লিকেশনগুলি এখনও জটিলতা সত্ত্বেও ডিবাগ এবং রক্ষণাবেক্ষণ করা হয়।

এছাড়াও, বিবৃতি সংখ্যা প্রবাহকে অনির্দেশ্য করে তোলে না । অ্যাসিক্রোনাস প্রোগ্রামিং করে। আপনি যদি সিট্রোনজিকভাবে ডিটারিনিস্টিক অ্যালগরিদম ব্যবহার করেন তবে আপনার প্রতিবার 100% পূর্বাভাসযোগ্য আচরণ থাকবে।

স্ট্যাক ওভারফ্লো বা কোড পর্যালোচনাতে আপনি কী করার চেষ্টা করছেন তা সম্ভবত আপনার আরও ভালভাবে ব্যাখ্যা করা উচিত যাতে লোকেরা আপনাকে ব্যবহার করার জন্য সঠিক সুনির্দিষ্ট প্রযুক্তি প্রস্তাব করতে পারে। আপনি পছন্দ করতে, আরও ভালো প্রশ্ন জিজ্ঞাসা করতে পারেন "আমি অত্যধিক পাখির কিভাবে এড়ানো না বিবৃতি <কোড এক টুকরা দেওয়া>"। if


1
বেশিরভাগ অ্যাপ্লিকেশনগুলিতে নেস্টিং এবং 1-লাইনের শর্তগুলির 2-3 স্তর থাকে। একটি সিদ্ধান্ত গাছের জন্য 50 টি স্তর নীচে নেস্টেড এবং অনেকগুলি শর্ত 30 বা ততোধিক ভেরিয়েবলের যৌক্তিক যৌগ হতে পারে এমন সমস্যা সম্পর্কে কী বলা যায়?
এসএফ

যদিও "প্রতিটি বৃহত অ্যাপ্লিকেশন ..." অবশ্যই সত্য, এটি বেশ পরিষ্কার যে ওপি শর্তসাপেক্ষ প্রকাশের দীর্ঘ ক্রমিকের কথা বলছে যা প্রয়োজনীয়ভাবে কোনও মডেলটিতে নিয়ম তৈরি করে। ifবিবৃতিগুলির বৃহত নেস্টেড গোষ্ঠীগুলি দ্রুত সর্বোত্তমভাবে অঘোষিত হয়ে পড়ে, তাই আরও ভাল পদ্ধতির প্রয়োজন।
কালেব

@ কালেব: আপনি ঠিক বলেছেন, এখনই পরিষ্কার , প্রশ্নের শুরুতে সুনির্দিষ্ট উদাহরণ সহ। আমার উত্তরটি লেখার সময় প্রশ্নটি সম্পাদিত হওয়ার আগে এটি ছিল না। এটি আমার এবং একই সাথে পোস্ট করা আরও দুটি উত্তরের প্রকৃত অসঙ্গতি ব্যাখ্যা করে।
আর্সেনী মোরজেনকো

2

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


2

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

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

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

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


2

আমি আপনাকে একটি বিধি ইঞ্জিন ব্যবহার করার পরামর্শ দেব। জাভা ক্ষেত্রে jBPM বা ওরাকল বিপিএম দরকারী হতে পারে। বিধিগুলির ইঞ্জিনগুলি আপনাকে XML এর মাধ্যমে অ্যাপ্লিকেশনটি কনফিগার করতে দেয়।


+1 আমি নিয়ম প্রকাশের জন্য ভাষা হিসাবে মোলের সাথে ইদানীং দ্রোলস ব্যবহার করেছি এবং আপনি যা খুঁজছেন ঠিক তেমনই। তবুও সত্য যে এটি খুব দ্রুত।
জালান

ড্রলগুলি একটি ভাল পছন্দ। আমি ব্যক্তিগতভাবে এখনই ওরাকল বিপিএম ব্যবহার করছি। ফিউগোও আছে। প্রচুর ওপেন সোর্স এবং স্বতন্ত্র সরঞ্জামগুলি উপলভ্য।
সিড

2

"যদি-তারপর" পদ্ধতিগত কোড বা ব্যবসায়িক অ্যাপ্লিকেশনগুলির জন্য তৈরি অসংখ্য বিধি সমাধান দ্বারা বর্ণিত হয় তবে সমস্যাটি "বিধিগুলি" দ্বারা ভালভাবে সমাধান করা হয় না। মেশিন লার্নিং এ জাতীয় দৃশ্যের মডেলিংয়ের জন্য বেশ কয়েকটি প্রক্রিয়া সরবরাহ করে।

মূলত, "সিস্টেম" (যেমন, একটি চারণভূমিতে গরু) প্রভাবিত করে এমন কারণগুলির (যেমন, সূর্য, বাতাস, খাদ্য উত্স, হঠাৎ ঘটনা ইত্যাদি) স্বচ্ছ প্রতিনিধিত্বের জন্য কাউকে কিছু পরিকল্পনা তৈরি করতে হবে। বিচ্ছিন্নতার বিপরীতে, সত্যিকারের মূল্যবান কার্যকরী প্রতিনিধিত্ব তৈরি করতে পারে এমন ভ্রান্ত বিশ্বাসের পরেও বাস্তব বিশ্বের কোনও কম্পিউটারই (মানব স্নায়ুতন্ত্র সহ) প্রকৃত মান ভিত্তিক বা গণনাগুলি প্রকৃত মূল্যবোধের উপর ভিত্তি করে নয়।

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

একটি সেলুলার অটোমেট মডেলটি কার্যকর করার জন্য ভাল কাজ করে। আসল মূল্যবান গণিত বিশ্বে অন্তর্নিহিত গণিত গরু মুভমেন্টকে অনুপ্রাণিত করে একটি ক্ষেত্রের গ্রেডিয়েন্ট মডেল। গরুগুলি অনুমিত নিম্ন ইউটিলিটি মানের অবস্থান থেকে অনুভূত উচ্চ ইউটিলিটি মানের অবস্থানে চলে আসে।

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

এখানে সুবিধা হ'ল গরু জবাই করা বা নতুন গরু অর্জন করা দ্বিপক্ষীয় গ্রাফটিতে "গরু" কোষগুলি বিয়োগ করে এবং সহজে যোগ করা যায়, যখন মডেলটি চলছে।


1

আমি মনে করি না যদি আপনার বিবৃতিতে এতগুলি সংজ্ঞা দেওয়া উচিত। আমার দৃষ্টিকোণ থেকে আপনার সমস্যার একাধিক উপাদান রয়েছে:

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

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

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

  • এটি করার জন্য আপনার অগত্যা কোনও নিউরাল নেটওয়ার্কের দরকার নেই, প্রতিটি নিয়মের জন্য কেবল একটি শ্রেণি, গরুদের জন্য একটি শ্রেণি, সম্ভবত ভূখণ্ড ইত্যাদি ইত্যাদি ... এবং দৃশ্যের জন্য একটি শ্রেণি (উদাহরণস্বরূপ 3 টি গরু বিভিন্ন নিয়মের সাথে এবং 1 নির্দিষ্ট ভূখণ্ড)। চিত্র ২ চিত্র 2 - গরু অ্যাপ async সিদ্ধান্ত নোড এবং সংযোগগুলি

    • বার্তা প্রেরণের জন্য লাল - নিয়মগুলির মাধ্যমে ওজনের মানচিত্র
    • সিদ্ধান্ত নেওয়ার পরে অবস্থান ও অবস্থান আপডেটের জন্য নীল
    • ওরিয়েন্টেশন এবং অবস্থান আপডেটের পরে ইনপুট আপডেটের জন্য সবুজ
    • ইনপুট পেতে কালো

    দ্রষ্টব্য: এরকম কিছু বাস্তবায়নের জন্য আপনার সম্ভবত একটি বার্তা কাঠামো দরকার

    সুতরাং যদি শেখা গরু তৈরি করা আপনার সমস্যার অংশ না হয় তবে আপনার নিউরাল নেটওয়ার্ক বা জেনেটিক অ্যালগরিদমের দরকার নেই। আমি এআই-র বিশেষজ্ঞ নই, তবে আমি অনুমান করি আপনি যদি নিজের গরুকে সত্যিকারের সাথে খাপ খাইয়ে নিতে চান তবে আপনি জেনেটিক অ্যালগরিদম এবং সঠিক নিয়মের সঠিক সেট দিয়ে এটি করতে পারেন। যদি আমি ভালভাবে বুঝতে পারি তবে আপনার এলোমেলো নিয়মের সেটিংস সহ গরুগুলির একটি জনসংখ্যার প্রয়োজন। এর পরে আপনি আসল গরুর আচরণকে আপনার মডেল জনগোষ্ঠীর আচরণের সাথে তুলনা করতে এবং 10% রাখতে পারেন যা প্রকৃতদের নিকটতম পথে চলে। এর পরে আপনি আপনার রাখা 10% এর উপর ভিত্তি করে আপনার গাভী কারখানায় নতুন নিয়ম কনফিগারেশন বাধা যুক্ত করতে পারেন এবং জনসংখ্যায় নতুন এলোমেলো গরু যুক্ত করতে পারেন, এবং ঠিক ততক্ষণ, যতক্ষণ না আপনি একটি মডেল গাভী পান যা সত্যিকারের মতো আচরণ করে ...


0

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

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


0

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

অনেকগুলি মেডিকেল সিস্টেম ইতিমধ্যে এই ইঞ্জিনগুলি ব্যবহার করে, উদাহরণস্বরূপ যুক্তরাজ্যের এনএইচএস ডাইরেক্ট ওয়েবসাইট

আপনি যদি .NET'er হন তবে আপনার জন্য Infer.NET কার্যকর হতে পারে।


0

যেহেতু আপনার গরুর চলাচলের দিকে নজর রয়েছে, সেগুলি 360 ডিগ্রি দিকে আটকে আছে (গরু উড়তে পারে না)) আপনার ভ্রমণের হারও রয়েছে। এটি ভেক্টর হিসাবে সংজ্ঞায়িত করা যেতে পারে।

এখন আপনি কীভাবে সূর্যের অবস্থান, পাহাড়ের opeাল, উচ্চ আওয়াজের মতো জিনিসগুলি মোকাবেলা করবেন?

প্রতিটি ডিগ্রি একটি পরিবর্তনশীল হবে যা সেই দিকে যাওয়ার ইচ্ছাকে বোঝায়। 90 ডিগ্রি গরুর ডানদিকে একটি টানটান বলুন (ধরে নেওয়া গরুটির 0 ডিগ্রি রয়েছে)। ডানদিকে যাবার আকাঙ্ক্ষা হ্রাস পাবে এবং 270 (বাম) যাওয়ার আকাঙ্ক্ষা উঠে যাবে। কোনও গতিতে যেতে ইচ্ছুক গরুগুলিতে তাদের প্রভাব যুক্ত করে বা বিয়োগ করে সমস্ত উদ্দীপনা দিয়ে যান। সমস্ত উদ্দীপনা প্রয়োগ করা হলে, গরু সর্বোচ্চ আকাঙ্ক্ষার দিকে চলে যাবে।

আপনি গ্রেডিয়েন্টগুলি প্রয়োগ করতে পারেন যাতে উদ্দীপনা বাইনারি হতে না হয়। উদাহরণস্বরূপ একটি পাহাড় একদিকে সরাসরি নয়। গরুটি উপত্যকায় বা পাহাড়ের রাস্তায় সরাসরি তার সমতল ছিল, ৪৫ * হালকা উঁচু পাহাড়ের উপরে 90 * হালকা নীচু পাহাড়ের উপরে। 180 * খাড়া পাহাড়ের উপরে।

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

তারপরে গরুটি যে কোনও 360 টি দিকে যাবে তা কেবল এটিকে 36 টি দিক দিয়ে ভেঙে ফেলার অনুমতি দেয়। প্রতিটি হচ্ছে 10 ডিগ্রি

তারপরে গরুটি যে কোনও 360 টি দিকে যাবে তা কেবল এটিকে 36 টি দিক দিয়ে ভেঙে ফেলার অনুমতি দেয়। প্রতিটি হচ্ছে 10 ডিগ্রি। আপনার কতটা নির্দিষ্ট হওয়া দরকার তার উপর নির্ভর করে।


-2

ওওপি ব্যবহার করুন। ক্লাসগুলির একটি গোছা কীভাবে তৈরি করা যায় যা বেস শর্তগুলি পরিচালনা করে এবং আপনি যা করছেন তা অনুকরণ করার জন্য এলোমেলো পদ্ধতি চালায়।

সাহায্যের জন্য একজন প্রোগ্রামার পান।

class COW_METHODS {

    Function = array('Action1','Action2',....'ActionX');

    function doAction() {
       execute(Function[random(1,5000]);
    }

    function execute(DynamicFunction) {
        exec(DynamicFunction());
    }

    Function Action1() {
        turnRight();
        eatGrass();
    }
    /*  keep adding functions for COW Methods ...  etc  */
    /*  and add classes for conditions inherit them as needed  */
    /*  keep an object to define conditions =  Singleton etc.  */
}

কেন এটি শেষ উত্তর। এটি বিন্দুতে পৌঁছেছে, যা হাজার হাজার যদি বিবৃতিগুলি এখন কোনও প্রোগ্রাম ডিজাইন করার উপায়।
wfbarksdale

1
কারণ " ওওপ ব্যবহার করুন help সহায়তা করার জন্য একজন প্রোগ্রামার পান। " পরামর্শ দেওয়ার পরে " আরও ফোন কল করুন! " যখন জিজ্ঞাসা করা হয় যে " আমি কীভাবে আমার বিক্রয়কে চারগুণ করতে পারি? " এটি কঠোরভাবে ভুল নয়, তবে এটি খুব বেশি উপকারও করে না।
জেনসজি

2
আমি হ্রাস পেয়েছি, কারণ এটি একটি খারাপ উত্তর। টেকনিক্যালি; আপনার উত্তরটি ওওপি-র সাথে সামান্যই আছে। একটি শ্রেণি বলে COW_METHODSমনে হচ্ছে শিথিলভাবে সম্পর্কিত পদ্ধতির সংগ্রহ ছাড়া আর কিছুই নয়। উদ্বেগের বিচ্ছেদ কোথায়? প্রশ্নের সাথে সম্পর্কিত, এটি কীভাবে প্রশ্নকারীকে সহায়তা করে?
oɔɯǝɹ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.