অ্যালগোরিদম পরামিতিগুলি সহজে সংশোধন করার জন্য আমি কোন প্রোগ্রামিং কৌশল গ্রহণ করতে পারি?


17

বৈজ্ঞানিক অ্যালগরিদম বিকাশ একটি উচ্চ পুনরাবৃত্তি প্রক্রিয়া প্রায়শই প্রচুর পরিমাণে পরামিতি পরিবর্তন করে যা আমি আমার পরীক্ষামূলক ডিজাইনের অংশ হিসাবে বা টুইটার অ্যালগরিদম পারফরম্যান্সের অংশ হিসাবে পরিবর্তিত হতে চাই। এই পরামিতিগুলি গঠনের জন্য আমি কী কৌশল গ্রহণ করতে পারি যাতে আমি সহজেই তাদের পুনরাবৃত্তির মধ্যে পরিবর্তন করতে পারি এবং যাতে আমি সহজেই নতুন যুক্ত করতে পারি?

উত্তর:


14

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

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

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

একটি সাধারণ কনফিগারেশন, যার মাধ্যমে বলা হয়

PetscObjectOptionsBegin(object); /* object has prefix and descriptive string */
PetscOptionsReal("-ts_atol",                                      /* options database key */
                 "Absolute tolerance for local truncation error", /* long description */
                 "TSSetTolerances",                               /* function and man page on topic */
                  ts->atol,                                       /* current/default value *?
                  &ts->atol,                                      /* place to store value */
                  &option_set);                                   /* TRUE if the option was set */
PetscOptionsList("-ts_type","Time stepping method","TSSetType",TSList,
                 defaultType,typeName,sizeof typeName,&option_set);
TSAdaptSetFromOptions(ts->adapt);                                 /* configures adaptive controller method */
/* ... many others */
/* ... the following is only called from implicit implementations */
SNESSetFromOptions(ts->snes);                                     /* configure nonlinear solver. */
PetscOptionsEnd();

মন্তব্য:

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

11

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

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

কয়েকটি উদাহরণ:


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

xmonad এক্স এর জন্য তাদের উইন্ডো ম্যানেজারটি কনফিগার করার জন্য এই পদ্ধতিটি ব্যবহার করে
rcollyer

2

প্রথম পয়েন্ট হিসাবে, আমি যথাসম্ভব সাধারণভাবে অ্যালগরিদম এবং সফ্টওয়্যারটি করব। আমি এই কঠিন উপায় শিখেছি।

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

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

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

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

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