بایگانی برچسب برای: بهسان اندیش

اشکالات

پلتفرم

منبع چارچوب دات‌نت مایکروسافت برای اجرا فقط ویندوز است. پیاده‌سازی‌های دیگری برای اجرای برنامه‌های #C در ویندوز، لینوکس،BSD یا Mac OS X وجود دارند اما هنوز کامل نیستند: Mono و DotGNU در نوامبر سال ۲۰۰۲ توسط مایکروسافت (نسخه ۱٫۰) برای پیاده‌سازی CLI برای کار در Free BSD و Mac OS X ۱۰٫۲ ارائه شد، اما نسخه‌های بعدی آن‌ها فقط قابل اجرا بر رویویندوز بود.

پیشرفت در آینده

نسخه بعدی این زبان، سی شارپ ۴ است که از اکتبر سال ۲۰۰۸ در حال ساخته شدن است. مایکروسافت لیستی از ویژگی‌های جدید سی شارپ ۴ را در کنفرانس توسعه دهندگان حرفه‌ای اعلام کرده‌است. تمرکز اصلی در ورژن بعدی روی قابلیت هماهنگی فریم ورک‌ها و نوع زبان‌هایی است که کامال پویا یا قیمتی پویا هستند، مانند dynamic language runtime و COM. ویژگی‌های زیر تاکنون اعلام شده‌اند:

پارامترهای نوع generic از نوع Covariant و contravariant

پارامترهای واسط‌های generic و deletageها می‌توانند با استفاده از کلمات out و in از دو نوع Covariant و contravariant باشند. این تعیین نوع‌ها بعداً برای تبدیل انواع به یکدیگر، چه از نوع صریح یا مجازی و چه از نوع compile-time یا run-time به کار می‌رود. به عنوان مثال، واسط IEnumerable<T> در زیر دوباره تعریف شده‌است:

interface IEnumerable < out T >
{
  IEnumerator < T > GetEnumerator();
}

بنابراین، هر کلاس مشتق شده‌ای که از IEnumerable<Derived> استفاه کرده باشد، با تمام کلاس‌های پایه که IEnumerable<Base> را دارند سازگار است. به عنوان تمرین، کد زیر نوشته شده‌است:

void PrintAll(IEnumerable < object > objects)
{
  foreach (object o in objects)
  {
    Console.WriteLine(o);
  }
}

IEnumerable < string > strings = new List < string > ();
PrintAll(strings);// IEnumerable<string> is implicitly converted to IEnumerable < object >

برای contravariance، رابط IComparer < T > به صورت زیر دوباره تعریف شده‌است:

 public interface IComparer < in T >
{
    int Compare(T x, T y);
}

بنابراین، هر کلاسی که IComparer < Base > را برای یک کلاس پایه بیان می‌کند، با IComparer < Derived > در تمام واسط‌ها و کلاس‌هایی که از آن کلاس پایه مشتق شده‌اند، سازگار است. این امر نوشتن کد زیر را میسر می‌سازد:

IComparer < object > objectComparer = GetComparer();
IComparer < string > stringComparer = objectComparer;IComparer < object > objectComparer = GetComparer();
IComparer < string > stringComparer = objectComparer;

جستجوی عضو پویا

در سامانه انواع داده‌های #C یک نوع جدید با نام شبه-نوع معرفی شده‌است که مانند System.Object رفتار می‌کند، ولی در ادامه، هر دسترسی به اعضا یا برنامه‌هایی که از این نوع استفاده می‌کنند، بدون چک شدن نوع داده‌هایشان اجازه کار دارند و تجزیه آن‌ها تا زمان اجرا به تعویق می‌افتد. به عنوان مثال:

// Returns the value of Length property or field of any object
  int GetLength(dynamic obj)
  {
    return obj.Length;
  }

  GetLength("Hello, world");// a string has a Length property,
  GetLength(new int[] { 1, 2, 3 });// and so does an array,
  GetLength(42);// but not an integer - an exception will be thrown here at run-time

صدا زده شدن‌های متد پویا، مانند پارامترهای صریح یا مجازی با مقدار نوع dynamic راه‌اندازی می‌شوند. به عنوان مثال:

 void Print(dynamic obj)
  {
     Console.WriteLine(obj);// which overload of WriteLine() to call is decided at run-time
  }

  Print(123);// ends up calling WriteLine(int)
  Print("abc");// ends up calling WriteLine(string)

جستجوی پویا تحت سه مکانیزم مشخص اجرا می‌شود: COM IDispatch برای اشیاء COM، رابط IDynamicObject DLR برای اشیاء دارای این واسط و Reflection برای بقیه اشیا؛ بنابراین هر کلاس #C می‌تواند صدا زده شدن‌های پویای خود را با اجرای IDynamicObject در نمونه‌های خود جدا کند. در مورد متدهای پویا و مشخص‌کننده صدا زدن‌ها، تجزیه و تحلیل اضافه بار مطابق انواع اصلی که به عنوان آرگومان‌ها هستند، در زمان اجرا اتفاق می‌افتد، در غیر این صورت بر اساس قوانین تجزیه و تحلیل اضافه بار #C عمل خواهد شد. به علاوه، در مواردی که در صدا زدن پویا، گیرنده خودش پویا نیست، تجزیه و اضافه بار زمان اجرا تنها به متدهایی که در زمان کامپایل به صورت گیرنده ظاهر شده‌اند، رسیدگی می‌کند. به عنوان مثال:

class Base
{
  void Foo(double x);
}

class Derived: Base
{
  void Foo(int x);
}

dynamic x = 123;
Base b = new Derived();
b.Foo(x);// picks Base.Foo(double) because b is of type Base, and Derived.Foo(int) is not exposed
dynamic b1 = b;
b1.Foo(x);// picks Derived.Foo(int)

هر مقداری که توسط دستیابی به عضو پویا برگردانده شده باشد، خودش از نوع پویا است. مقادیر نوع پویا به سایر نوع‌ها و از سایر نوع عا قابل تبدیل هستند. در نمونه کد بالا، این امر به تابع GetLength اجازه با مقدار بازگردانده شده از Length بدون هیچ صریحی به عنوان integer استفاده کند. در زمان اجرا، مقدار واقعی به نوع خواسته شده تبدیل می‌شود.

کلمه کلیدی اختیاری ref

در حال حاضر کلمه کلیدی ref برای متدهای صدا زننده اختیاری است. کد زیر را در نظر بگیرید:

void Increment(ref int x)
{
  ++x;
}

int x = 0;
Increment(ref x);

به صورت زیر هم می‌تواند نوشته شود:

void Increment(ref int x)
{
  ++x;
}

int x = 0;
Increment(x);

آرگومان‌های نام‌گذاری شده و پارامترهای اختیاری

در سی شارپ ۴ پارامترهای اختیاری ای با مقادیر پیش‌فرض موجود در ++C معرفی می‌شوند. به عنوان مثال:

void Increment(ref int x, int dx = 1)
{
  x += dx;
}

int x = 0;
Increment(ref x);// dx takes the default value of 1
Increment(x, 2);// dx takes the value 2

به علاوه، برای کامل کردن پارامترهای اختیاری، می‌توانید صریحاً نام پارامترها را در صدازدن‌های متدها تعیین کنید. این کار به شما اجازه تصویب کردن انتخابی برای هر زیر مجموعه اختیاری از پارامترهای متد را می‌دهد. تنها محدودیت موجود این است که پارامترهای نام دار باید بعد از پارامترهای بدون نام بیایند. نام پارامترها می‌توانند برای هر دو نوع پارامترهای اختیاری و ضروری تعیین شوند و می‌توانند برای بهبود خوانایی و فراخوانی دوباره آرگومان‌ها مفید باشند. به عنوان مثال:

Stream OpenFile(string name, FileMode mode = FileMode.Open, FileAccess access = FileAccess.Read) { ... }

OpenFile("file.txt");// use default values for both "mode" and "access"
OpenFile("file.txt", mode: FileMode.Create);// use default value for "access"
OpenFile("file.txt", access: FileAccess.Read);// use default value for "mode"
OpenFile(name: "file.txt", access: FileAccess.Read, mode: FileMode.Create);// name all parameters for extra readability, and use order different from method declaration

پارامترهای اختیاری inter-operating را با COMراحت تر می‌کنند. در گذشته، #C مجبور بود تمام پارامترهای متد سازنده COM را پشت سر بگذارد، حتی آنهایی را که اختیاری بودند؛ به عنوان مثال:

object fileName = "Test.docx";
object missing = System.Reflection.Missing.Value;

doc.SaveAs(ref fileName,
    ref missing, ref missing, ref missing,
    ref missing, ref missing, ref missing,
    ref missing, ref missing, ref missing,
    ref missing, ref missing, ref missing,
    ref missing, ref missing, ref missing);

با پشتیبانی از پارامترهای اختیاری، کد بالا می‌تواند به صورت زیر خلاصه بشود:

doc.SaveAs("Test.docx");

کتابخانه‌ها

جزئیات مشخصات سی شارپ، حداقل تعداد نوع‌ها و کتابخانه‌های کلاس است که کامپایلر نیاز به وجود آن‌ها دارد. عملاً، اغلب سی شارپ توسط بیشترین استفاده از CLI را می‌کند، که استاندارد شده ECMA-۳۳۵ است.

مثال Hello world

در زیر یک مثال ساده از برنامه سی شارپ آمده‌است، نسخه‌ای از مثال کلاسیک Hello World:

class ConsoleApp1
{
    static void Main()
    {
        // a first program in C#.net
        System.Console.Write("Hello, World!");
    }
}

نتیجه، چاپ شدن متن زیر در خروجی است:

Hello, world!

هر خط هدفی دارد:

class ExampleClass

در بالا، تعریف کلاس آمده‌است. هر چیزی که در بین در علامت پرانتز باشد،ExampleClass را توصیف می‌کند:

static void Main()

این یک تابع عضو کلاس را در زمان شروع اجرای برنامه اعلان می‌کند. دات نت در زمان اجرا، تابع Main را صدا می‌زند (نکته: Main ممکن است از هر جای دیگری نیز صدا زده شود، مثلاً توسط تابع ExampleClass و با کد ()Main). کلمه کلیدی static تابع را بدون داشتن نمونه‌ای از ExampleClass قابل دسترس می‌کند. هر تابع Main در هر کنسولی باید به صورت static تعریف شود. در غیر این صورت برنامه به یک نمونه نیاز خواهد داشت و هر نمونه به یک برنامه نیاز دارد. برای اجتناب از این وابستگی دایره‌ای تجزیه ناپذیر، کامپایلرهای سی شارپ در صورت Static نبودن تابع Main، یک خطا اعلام می‌کنند. کلمه کلیدی void نشان دهنده این است که تابع Main هیچ مقداری را برنمی‌گرداند.

Console.WriteLine("Hello, world!");

خط بالا، خروجی را می‌نویسد. در فضای اسم System, Console یک کلاس استاتیک است که یک میانجی بین ورودی، خروجی و خطای کنسول می‌باشد. برنامه‌ای که متدWriteLine را از کنسول صدا می‌زند، خروجی رشته «Hello, world!» را در خروجی نمایش می‌دهد.

استانداردسازی

در آگوست سال ۲۰۰۰، شرکت مایکروسافت، و Hewlett-Packard و شرکت اینتل به عنوان پشتیبان مشخصات سی شارپ را مانند CLI به سازمان استانداردسازی ECMA ارائه کردند. در دسامبر سال ۲۰۰۱، این سازمان، ECMA-۳۳۴ را با عنوان مشخصات زبان #C منتشر کرد. سی شارپ در سال ۲۰۰۳ به عنوان یک استاندارد ISO به ثبت رسید(ISO/IEC ۲۳۲۷۰). در سال ۲۰۰۲، ECMA دومین ویرایش از خصوصیات زبان سی شارپ را پذیرفت.

در ژوئن سال ۲۰۰۵، ECMA سومین ویرایش را با اضافه کردن مواردی همچون کلاس‌های partial، متدهای ناشناس، انواع nullable و Genericها منتشر کرد. در ژوئیه ۲۰۰۵، ECMA استانداردها و TRها را همراه با پردازش Fast-Track اخیر به ISO/IEC JTC پیشنهاد کرد. این روند معمولاً ۶ تا ۹ ماه زمان می‌برد. آخرین ویرایش این زبان در ۱۵ آگوست سال ۲۰۱۲ در قالب Framework ۴٫۵ارائه گردید

کارایی

با توجه به توابع موجود در چارچوب دات‌نت امکان استفاده از این توابع وجود دارد که می‌توان گفت برای هر کاری شرکت مایکروسافت تابعی پیش‌بینی کرده؛ که این امکان را ایجاد می‌کند که به فایل اصلی پروژه هیچ فایل کتابخانی را اضافه نکنید (هم به صورت دستی یا خود کامپایلر). این موضوع خود باعث ایجاد فایل‌های خروجی با حجم بسیار کم می‌شود. این موضوع در بسیاری از موارد بسیار اهمیت دارد. برنامه‌های سی شارپ، همچون تمام برنامه‌های نوشته شده در چارچوب دات‌نت و سایر محیط‌های ماشینی مجازی مانند جاوا، نیازمند منابع سامانه و حافظه بیشتری نسبت به برنامه‌های نوشته شده با سایر زبان‌ها مانند سی پلاس پلاس است و هم چنین سرعت کمتری نیز دارد. هر چند تعریف زبان سی شارپ و CLI تحت استانداردهای ISO و ECMA استاندارد شده‌اند،CLI تنها قسمتی از Base Class Library (BCL) مایکروسافت می‌باشد که شامل کلاس‌های غیر استاندارد استفاده شده در برنامه‌های #C نیز می‌شود. از این گذشته، بعضی از قسمت‌های BCL تحت حق امتیاز مایکروسافت هستند که ممکن است پیاده‌سازی کامل framework را مختل کند، زیرا تنها بخش‌های استاندارد دارای حق محافظت RAND در برابر مدعیان را دارند.

پیاده‌سازی‌ها

متداول‌ترین کامپایلر سی شارپ، Microsoft Visual C# می‌باشد.

کامپایلرهای سی شارپ
  • پروژه Microsoft Rotor (در حال حاضر به عنوان Shared Source Common Language Infrastructure شناخته می‌شود) (ثبت شده فقط برای استفاده آموزشی و تحقیقی) یک پیاده‌سازی منبع اشتراکی از CLR Runtime را فراهم می‌آورد و یک کامپایلر سی شارپ، و یک زیرمجموعه از کتابخانه]] CLI Framework مورد نیاز.
  • پروژه Mono یک اوپن سورس از کامپایلر سی شارپ است، یک پیاده‌سازی اوپن سورس کامل از CLI شامل کتابخانه‌های Framework مورد نیاز که در ECMA ظاهر شده‌اند، و یک پیاده‌سازی کامل نزدیک به بقیه کتابخانه‌های اختصاصی کلاس چارچوب دات‌نت مایکروسافت.
  • پروژه DotGNU نیز یک اوپن سورس از کامپایلر سی شارپ است، که پیاده‌سازی آن بسیار نزدیک به Common Language Infrastructure می‌باشد و کتابخانه‌های framework مورد نیاز موجود در ECMA و زیر مجموعه‌ای از کلاس‌های کتابخانه‌ای شخصی مایکروسافت در دات نت و دات نت ۲ را دربردارد.

کاملاً شبیه به پروژه Mono.

نام زبان

اسم سی شارپ از علامت موسیقی شارپ گرفته شده‌است که در موسیقی بیان گر این است که متن نوشته شده باید نیم قدم از خط بالاتر باشد. مطابق با ECMA-۳۳۴، بخش ۶، مخفف‌ها و اختصارها، نام زبان به صورت «#C» نوشته می‌شود(«کلمه لاتین C (U+۰۰۴۳) به همراه علامت عددی #(U+۰۰۲۳)») که به صورت «سی شارپ» تلفظ می‌شود. علامت «#» نباید با علامت شارپدر موسیقی(♯، U+266F) که در یک صفحه کلید استاندارد وجود ندارد اشتباه گرفته شود. پسوند شارپ، توسط بسیاری دیگر از زبان‌های دات نت مانند #J، #A و #F نیز به کار رفته‌است. پیاده‌سازی اولیه از زبان ایفل تحت دات نت نیز #Eiffel نام داشت که الان زبان ایفل را به‌طور کامل پشتیبانی می‌کند. هم چنین این پسوند بعضی وقت‌ها در کتابخانه‌ها نیز به کار می‌رود، مانند #Gtk، #Cocoa و#Qt.

کلمات اختصاری به کار رفته در این متن

منبع

آشنایی با #C قسمت 1
آشنایی با #C قسمت 2
آشنایی با #C قسمت 3

سی شارپ (به انگلیسی: #C )یک زبان برنامه نویسی همگردان، سطح بالا، شیءگرا، ساخت یافته، رویداد محور، تابعی، دستوری و جنریک است که توسط شرکت مایکروسافت در سال 2000 میلادی از خانوادهٔ زبان‌های چارچوب دات‌نت معرفی شد. زبان #C همچنین از خانواده زبان‌های برنامه‌نویسی سی نیز است.

زبان #C، یک زبان برنامه‌نویسی چند الگویی و منظم شده مدل‌های تابعی، اَمری، عمومی، شیءگرا و جز گرا و در بستر چارچوب دات نتمی‌باشد. این زبان توسط شرکت مایکروسافت و جزئی از دات نت به وجود آمد و بعداً استانداردهای ECMA و ISO را نیز دربر گرفت. #C یکی از ۴۴ زبان برنامه‌نویسی است که توسط زمان اجرای زبان مشترک از چارچوب دات‌نت پشتیبانی می‌شوند و در همه جا به وسیلهمایکروسافت ویژوال استودیو شناخته می‌شود.

زبان #C با قدرت و در عین حال سطح بالایی خود توانسته توجه بسیاری از برنامه نویسان را به خود جلب کند.

این زبان برپایه سادگی، مدرن بودن، همه منظوره و شئ گرا بودن ساخته شد. آندرس هجلزبرگ، طراح زبان برنامه‌نویسی دلفی، سرپرستی تیم طراحان زبان #C را بر عهده داشت. این زبان دارای دستوری شیءگرا مشابه ++C است و به شدت از زبان‌های جاوا و دلفینیازمندمدرکتأثیر پذیرفته‌است. در ابتدا نام این زبان COOL بود که مخفف C like Object Oriented Language بود، هر چند در ژوئیه ۲۰۰۰م، زمانی کهمایکروسافت پروژه را عمومی اعلام کرد، اسم آن به #C تغییر پیدا کرد.

اهداف طراحی زبان

  • استاندارد ECMA این اهداف طراحی زبان را برای #C برآورده می‌سازد:
  • #C یک زبان برنامه‌سازی ساده، مدرن، برای اهداف عمومی و شیءگرا است.
  • به دلیل اهمیت داشتن موضوع نیرومندی و دوام و بهره‌وری برنامه‌نویس، زبان دارای چک‌کننده Strong Type، چک‌کننده مرزهای آرایه، تشخیص حالت‌هایی که یک متغیر مقداردهی اولیه نشده‌است، قابلیت انتقال کدها و Garbage Collection خودکار است.
  • این زبان برای استفاده در اجزای توسعه نرم‌افزار برای دستیابی به مزایای سامانه‌های توزیعی در نظر گرفته شده‌است.
  • قابلیت انتقال برنامه‌نویس بسیار مهم است، خصوصاً برای آن دسته از برنامه‌نویسانی که با زبان‌های C و C++ آشنا هستند.
  • پشتیبانی از این زبان برای بین‌المللی شدن بسیار مهم است.
  • زبان #C برای نوشتن برنامه‌ها برای سامانه‌های تعبیه شده و میزبان در نظر گرفته شده‌است، سیستم‌عامل‌های پیچیده بسیار بزرگ گرفته تا توابع اختصاصی بسیار کوچک.
  • هر چند برنامه‌های نوشته شده با #C طوری هستند که از لحاظ حافظه و پردازنده مورد نیاز مقرون به صرفه باشند، ولی خود زبان از لحاظ اندازه و کارایی به خوبی زبان‌های C و اسمبلی نیست.

تاریخچه #C

در سال ۱۹۹۹م، شرکت سان مایکروسیستمز اجازه استفاده از زبان برنامه‌نویسی جاوا را در اختیار شرکت مایکروسافت قرار داد تا در سیستم‌عامل خود از آن استفاده کند. جاوا در اصل به هیچ پلت فرم یا سیستم‌عاملی وابسته نبود، ولی مایکروسافت برخی از مفاد قرار داد را زیر پا گذاشت و قابلیت مستقل از سیستم‌عامل بودن جاوا را از آن برداشت. شرکت سان پرونده‌ای علیه مایکروسافتدرست کرد و مایکروسافت مجبور شد تا زبان شیءگرای جدیدی با کامپایل جدید که به ++C شبیه بود را درست کند. در طول ساخت دات نت، کلاس‌های کتابخانه‌ای با زبان و کامپایلر SMC نوشته شدند. در سال ۱۹۹۹ آندرس هلزبرگ گروهی را برای طراحی زبانی جدید تشکیل داد که در آن زمان نامش Cool بود و همانند C بود با خواص شیءگرایی. مایکروسافت در نظر داشت اسم این زبان را تا آخر COOL قرار دهد، ولی به دلیل مناسب نبودن برای اهداف تجاری این کار را نکرد. در ارائه و معرفی رسمی چارچوب دات‌نت در PDC در سال ۲۰۰۰ این زبان به #C تغییر نام یافت و کتابخانه کلاس‌ها و runtime در ای‌اس‌پی‌دات‌نت به #C منتقل شدند. مدیر و سرپرست طراحان در مایکروسافت آندرس هلزبرگ بود که تجربه قبلی او در طراحی Framework و زبان‌های برنامه سازی++Borland، دلفی، Turbo Pascal، ویژوال سی++ به آسانی در دستورالعمل‌های #C قابل رویت است و به همان خوبی در هسته CLR.

ویژگی‌های #C

برخی از تفاوت‌های زبان #C با زبان‌های C و ++C عبارتند از:

  • هیچ تابع یا متغیر سراسری(Global) وجود ندارد، تمام متدها و اعضا بایستی در داخل کلاس‌ها تعریف شوند. این امر ممکن است، هر چند برای استفاده از متغیرها و توابع عمومی باید از متدها و متغیرها در کلاس‌های عمومی استفاده کرد.
  • متغیرهای عمومی، بر خلاف زبان‌های C و ++C، نمی‌توانند بلاک‌های پیوستی را در بر بگیرند.
  • #C دارای یک نوع داده بولی است (bool). برخی از عبارت‌ها مانند while و if که شرطی هستند، نیازمند یک عبارت نوع بولی هستند. همان‌طور که ++C نیز دارای نوع داده بولی است، این نوع داده به راحتی می‌تواند به یا از Integerها تبدیل شود، و عبارتی مانند (if(a نیازمند این امر است که a از یک نوع قابل تبدیل به bool یا اشاره گر باشد. کامپایلر #C برنامه‌نویس را در این شرایط مجبور به استفاده از عباراتی می‌کند که به درستی یک مقدار bool را برمی‌گردانند؛ بنابراین دستوری مانند (if(a = b باعث بروز خطا می‌شوند. (به جای = بایستی از == استفاده شود)
  • در سی شارپ، اشاره گرهای به حافظه بایستی فقط در داخل بلوکهای unsafe استفاده شوند و برنامه در این حالت برای اجرا نیاز به اجازه از کاربر دارد. بیشتر دسترسی شی از طریق شی امن است که یا همیشه در حال اشاره به شی صحیح موجود است یا یک مقدار Null دارد. اشاره گری به شی به درد نخور یا بلاک حافظه رندم غیرممکن است. اشاره گر نا امن می‌تواند به نمونه‌ای از value-type، آرایه، رشته یا بلاکی که حافظه به آن داده شده‌است اشاره نماید. کدی که به عنوان نا امن علامت نخورده باشد، هنوز می‌تواند اشاره گرها را از سامانه بازیابی یا در آن ذخیره کند ولی نمی‌تواند مرجع جدیدی به آن‌ها اختصاص دهد.
  • حافظه ساماندهی شده نمی‌تواند صریحاً آزاد شود، ولی به‌طور خودکار به عنوان به درد نخور تلقی می‌شود. انتخاب آدرس‌های به درد نخور حافظه نفوذ ناپذیر است. هم چنین #C با استفاده از عبارات، پشتیبانی مستقیمی از پایان اجباری می‌کند (پشتیبانی از اصطلاح Resource Acquisition Is Initialization).
  • وراثت چندگانه از کلاس‌ها در این زبان پشتیبانی نمی‌شود. البته یک کلاس امکان ارث بری از تعداد نامحدود واسط‌ها را دارد. پشتیبانی نکردن از وراثت چندگانه به دلیل اهداف معماری این زبان در CLI و برای جلوگیری از پیچیدگی است. در عوض می‌توان از اینترفیس‌های مختلف استفاده کرد. یعنی برای یک کلاس که احتمالاً فرزند کلاسی دیگر است (ارث برده) می‌توان چندین اینترفیس را پیاده‌سازی (Implement) نمود.
  • #C بسیار typesafe تر از ++C است. تنها تبدیلات ضمنی مثل تبدیل نوع داده کوچکتر به بزرگتر یا تبدیل نوع مشتق شده به نوع پایه به‌طور پیش‌فرض و بدون خطا صورت می‌پذیرد. هیچ تبدیل ضمنی ای میانBooleanها و Integerها وجود ندارد و هر تبدیل user-defined بایستی به صراحت با یکی از کلمات explicit یا implicit نشانه گذاری شود. تبدیل b به a در حالتی که a یک Integer و b یک double باشد در زبان C++ مجاز است اما در #C به یک خطای زمان کامپایل منجر می‌شود (بایستی به صورت explicit تعریف شود)
  • اعضای Enumeration در داخل محدوده شخصی خود قرار دارند.
  • #C قابلیت syntactic sugar را برای توابع متداول، اکسسورها و ماجول‌های کسول شده در یک کلاس به صورت ویژگی‌ها قرار داده‌است.

اکسسورها که خاصیت نیز گفته می‌شوند در زبان #C قادر به کنترل دسترسی اعضا و معتبرسازی داده‌ها هستند.

  • تمام انواع بازتابی(Reflection) و بازیابی(Recovery) قابل استفاده‌است.
  • در حال حاضر (۳ ژوئن ۲۰۰۸) دارای ۷۷ کلمۀ رزرو شده‌ ( کلمۀ کلیدی ) است.

ساختمان داده (ساختار و ذخیره‌سازی داده) در #C

این کامپایلر در مقابل زبان‌های C یا ++C دارای ساختار بسیار متفاوتی است که دانستن آن به برنامه‌نویس امکان نوشتن برنامه‌های بسیار بهینه را خواهد داد.

رشته‌ها

در C یا ++C ساختار رشته به صورت ارایه‌ای از نوع char بود که امکان اضافه کردن به رشته را محدود می‌کرد به دلیل ثابت بودن طول در آغاز تعریف ولی در #C دو نوع متفاوت رشته وجود دارد؛ که یکی به صورت آرایه‌ای با طول ثابت ۲۵۶(در عمل ۲۵۵)موجوداست (به صورت پیش فرض) و در صورتی که با کمبود جا روبرو شود فضای جدید (بزرگتر) یافته و به ان انتقال می‌دهد؛ ولی در نوع دوم رشته‌ها از لیست پیوندی استفاده می‌شود.

سامانه یکپارچه شده

#C دارای یک سامانه نوع یکپارچه‌است که به آن CTS می‌گویند. این بدان معناست که تمام انواع، شامل موارد اصلی مانند Integerها، مشتق شده از System.Object هستند. به عنوان مثال، هر نوع یک متد به نام ToString() را به ارث می‌برد. بخاطر کارایی، انواع اولیه (و انواع مقداری) به‌طور داخلی فضایی برای آن‌ها بر روی پشته در نظر گرفته می‌شود.

انواع داده

CTS داده‌ها را به دو نوع تقسیم می‌کند:

  • نوع مقداری (Value Type)
  • نوع مرجعی (Refrence Type)

انواع داده‌ای توده ساده‌ای از داده می‌باشند. نمونه‌های انواع داده‌ای نه هویت مرجعی دارند و نه مفاهیم مقایسه مراجع را. برای مقایسه برابری یا عدم برابری انواع داده‌ای، خود مقدار داده‌ها را با یکدیگر مقایسه می‌کنیم مگر اینکه عملگرهای مشابه دوباره تعریف شده باشند. مقادیر داده‌های مرجعی همیشه یک مقدار پیش‌فرض دارند و همیشه می‌توانند ایجاد یا کپی شوند. یکی دیگر از محدودیت‌های انواع داده‌ای این ات که آن‌ها نمی‌توانند از یکدیگر مشتق شوند (ولی می‌توانند اشتراکاتی داشته باشند) و هم چنین نمی‌توانند در سازنده مقدار دهی اولیه شوند. مثالی از انواع داده‌ای، بعضی از انواع اولیه مانند int و float و char و System.DateTime می‌باشند. در مقابل، انواع مرجعی مفهوم تعریف مرجعی را دارند (که در آن هر نمونه از نوع مرجع، به‌طور ذاتی از دیگر نمونه‌ها جدا می‌شود، حتی اگر داده هر دو نمونه یکی باشد). این دقیقاً نمونه مشابه مقایسه تساوی یا عدم تساوی داده‌های مرجعی است، که در آن آزمایش برای مرجع‌ها از داده‌ای‌ها سریع تر است. در کل نه همیشه امکان تعریف نمونه مرجعی وجود دارد و نه امکان کپی یا نمایش مقادیر مقایسه دو نمونه؛ ولی به هر حال انواع مرجعی خاص می‌توانند این اعمال را از طریق سازنده‌های عمومی یا اجرای واسط‌های مشابه (مثل ICloneable یا IComparable) انجام دهند. نمونه‌هایی از انواع مرجعی، اشیاء، System.String و Sysmet.Array می‌باشند. هر دو نوع داده قابلیت انعطاف توسط تعریف به وسیله کاربر را دارند. در واقع وقتی ما نوع داده‌ای را به تابع ای ارسال می‌کنیم، آدرس داده نیز فرستاده می‌شود. البته این امر پیش‌فرض است ولی برای داده‌های مثل آرایه، رشته‌ای، آدرس فرستاده می‌شود و ارسال از نوع مرجع می‌شود

Boxing و UnBoxing

Boxing عمل تبدیل مقدار نوع داده‌ای به نوع مرجع مشابه آن می‌باشد.

مثال:

int foo = 42;// Value type...
object bar = foo;//foo is boxed to bar.

UnBoxing عمل تبدیل نوع مرجع به نوع داده‌ای می‌باشد. مثال:

int foo = 42;// Value type.
object bar = foo;// foo is boxed to bar.
int foo2 = (int)bar;// Unboxed back to value type.

#C به برنامه‌نویس با استفاده از کلمه کلیدی Struct اجازه می‌دهد تا انواع مقداری User-defined را ایجاد کند. از دیدگاه برنامه‌نویسی، آن‌ها کلاس‌های سبک وزن به نظر می‌رسند. برخلاف کلاس‌ها (که بر روی heap قرار می‌گیرند) و شبیه به انواع اولیه استاندارد مانند انواع مقداری Structها نیز بر روی پشته قرار می‌گیرند. آن‌ها همچنین می‌توانند قسمتی از یک شئ باشند، یا در یک آرایه مرتب شوند، بدون حافظه غیر مستقیمی که به‌طور معمول برای انواع کلاس تخصیص می‌یابد.

ویژگی‌های جدید در سی شارپ ۲٫۰

ویژگی‌های جدید در #C چارچوب دات‌نت SDK ۲٫۰ (مطابق با سومین ویرایش استاندارد ECMA-۳۳۴):

کلاسهای partial

کلاس‌های Partial اجازه اجرای کلاس‌ها از بیش از یک سورس فایل را می‌دهند. این امر اجازه می‌دهد تا کلاس‌های بسیار بزرگ را قطعه قطعه کنیم و همچنین برای زمانی که برخی قسمت‌های یک کلاس به‌طور خودکار تولید می‌شوند مفید است.

file.cs:

public partial class MyClass
{
    public MyClass()
    {
// implementation
    }
}

file2.cs:

public partial class MyClass
{
    public void SomeMethod()
    {
// implementation
    }
}

Genericها

genericها یا نوع‌های پارامتری شده یا چندریختی‌های پارامتری یک ویژگی جدید چارچوب دات‌نت ۲٫۰ است که به وسیله #C پشتیبانی می‌شود. برخلاف Templateهای سی پلاس پلاس، در این انواع به جای اینکه نمونه‌سازی توسط کامپایلر انجام شود، در زمان اجرا صورت می‌گیرد، بنابراین می‌توانند چند زبانه باشند در حالی که ++C نمی‌تواند. آن‌ها دارای ویژگی‌هایی هستند که به‌طور مستقیم توسط Templateهای ++C پشتیبانی نمی‌شوند مانند نوع محدودیت‌ها در پارامترهای Generic با استفاده از رابط‌ها(Interface). سی شارپ از پارامترهای‌های Generic بدون نوع پشتیبانی نمی‌کند. بر خلاف genericهای جاوا، generic‌های دات نت برای پارامتری کردن انواع داده‌ای در اشیاء ماشین مجازی CLI، از مفاهیم شیءگرایی استفاده می‌کنند که اجازه بهینه‌سازی و حفاظت انواع اطلاعات را می‌دهد.

کلاس‌های static

کلاس‌ها به صورت Static قابل تعریف نیستند مگر اینکه تمام اعضای آن‌ها Static باشند؛ که این امر بسیار شبیه به مفهوم مدل در زبانهای رویه‌ای است. (زبان رویه‌ای: یک زبان برنامه‌نویسی که در آن عنصر اصلی برنامه‌نویسی یک زیربرنامه‌است. مانند زبان‌های C، پاسکال و…)

یک شکل جدید از تکرارکننده با استفاده از سازنده توابع

یک شکل جدید از iterator(تکرارکننده)، با استفاده از ساختار yield return بسیار شبیه به yield زبان Python.

// Method that takes an iterable input (possibly an array) and returns all even numbers.
public static IEnumerable&lt;int&gt; GetEven(IEnumerable&lt;int&gt; numbers)
{
    foreach (int i in numbers)
    {
        if (i % 2 == 0) yield return i;
    }
}

Delegateهای ناشناس

Delegate یک شی می‌باشد که حاوی یک یا چند اشاره گر به توابع می‌باشد؛ که با Invoke کردن آن تمامی توابع اشاره شده داخل آن اجرا می‌شوند.

Delegateهای ناشناس که عملکردهای محدودی را در #C به وجود می‌آورند. کد کنار بدنه Deletage ناشناس، دسترسی کامل برای خواندن یا نوشتن در متغیرهای عمومی، پارامترهای توابع و اعضای کلاسهای دارای محدوده Deletage را دارد ولی پارامترهای out و ref را پشتیبانی نمی‌کند. برای مثال:

int SumOfArrayElements(int[] array)
{
    int sum = 0;
    Array.ForEach(       array,
        delegate(int x)
        {
            sum += x;
        }
  );
    return sum;
}

Delegate covariance and contravariance

تبدیل گروه‌های متد به نوع Deletage در برگشت دارای covariant و در انواع پارامترها دارای contravariant هستند.

اکسسورهای یک خاصیت(get و set) می‌توانند دارای سطح دسترسی متفاوتی باشند

مثال:

string status = string.Empty;
public string Status
}
    get { return status; }// anyone can get value of this property,
    protected set { status = value; }// but only derived classes can change
it
}

نکته مهم: سطح دسترسی خاصیت نمی‌تواند بالاتر از سطح دسترسی اکسسورها باشد. به عنوان مثال private بودن خاصیت و public بودن اکسسور باعث بروز خطا می‌شود.

نوع داده Nullable

نوع داده Nullable (که با یک علامت سؤال قابل تشخیص است: int? i = null;)اجازه تخصیص مقدار null را برای انواع داده‌ای می‌دهد. این امر باعث بهبودی فعل و انفعال با پایگاه داده SQL می‌شود. در این حالت نوع ستونی INTEGER NULL در SQL به‌طور مستقیم به int? در سی شارپ تبدیل می‌شود.

داده‌های Nullable در آخرین لحظات اوت ۲۰۰۵ اضافه شدند چند هفته مانده به اتمام کار اداری و برای بهبود زبان. متغیر Null در حقیقت خالی نیست، بلکه نمونه‌ای است از struct Nullable<T> با ویژگی HasValue مساوی false. وقتی در برنامه قرار می‌گیرد، خود به خود نمونه خالی در آن قرار می‌گیرد، نه مقدار خود آن، در نتیجه اشاره گر مقصد همیشه غیر Null می‌باشد، حتی برای مقادیر Null. کد زیر نضص بالا را مشخص می‌کند:

int? i = null;
object o = i;
if (o == null)
    Console.WriteLine("Correct behaviour - runtime version from September 2005 or later");
else
    Console.WriteLine("Incorrect behaviour - pre-release runtime (from before September 2005)»);

وقتی درون شی ای کپی می‌شود، نمونه Nullable به صورت تشریفاتی در آن قرار می‌گیرد و در نتیجه مقادیر و منابع Null با هم برابر می‌شوند. در گذشته این خاصیت دارای مجادله بود تا زمانی که علاوه بر چارچوب دات‌نت ۲، به هسته CLR نیز مجهز شد و همه تکنولوژی‌ها نظیر سی شارپ، ویژوال بیسیک، مایکروسافت اس‌کیوال سرور ۲۰۰۵ و مایکروسافت ویژوال استودیو ۲۰۰۵ را شامل شد.

Coalesce Operator

مقدار اولین عملوندی که null نباشد را برمی‌گرداند. (یا null، برای زمانی که تمام عملوندها null باشند)

object nullObj = null;
object obj = new Object();
return nullObj ?? obj;// returns obj

کاربرد اصلی این عملگر در قرار دادن یک مقدار nullable در یک مقدار non-nullable با استفاده از یک دستورالعمل ساده‌است.

int? i = null;
int j = i ?? 0; /* Unless i is null, initialize j to i. Else (if i is null), initialize j to 0. */

 

منبع

آشنایی با #C قسمت 1
آشنایی با #C قسمت 2
آشنایی با #C قسمت 3

انواع سامانه‌های توصیه‌گر

سامانه‌های توصیه‌گر به طور کلی به سه دسته تقسیم می‌شوند؛ در رایج‌ترین تقسیم‌بندی، آنها را به سه گروه ۱. محتوا محور ۲. دانش محور و ۳. صافی سازی تجمعی، تقسیم می‌کنند، که البته گونه چهارمی تحت عنوان Hybrid RS هم برای آنها قائل می‌شوند.

یک رویکرد به سیستم‌های توصیه‌گر، استفاده از الگوریتم‌های CF یا صافی سازی تجمعی است. در این رویکرد به جای استفاده از محتوای (Content) اقلام، از نظرات و رتبه‌بندی‌های انجام شده توسط کاربران برای ارائه پیشنهاد، استفاده می‌شود. مشکل اصلی استفاده از این رویکرد، مشکل شروع سرد (Cold Start problem)[۲] می‌باشد که برای کاربران جدید بروز می‌کند که در سیستم ثبت نام می‌کنند و سیستم هیچ اطلاعاتی از نظرات یا علایق کاربر ندارد (New User problem). در چنین شرایطی، سیستم‌ها معمولاً از یادگیری فعال (Active Learning)[۳] یا استفاده از ویژگی‌های شخصیتی کاربر،[۴] برای حل مشکل استفاده می‌کنند.

در روش محتوا محور، اقلام پیشنهادی، به این دلیل که با اقلامی که کاربر فعال (کاربری که قرار است به او توصیه کنیم) نسبت به آنها ابراز علاقه کرده‌است شباهت‌هایی دارند، به کاربر توصیه می‌شوند ولی در CF، لیست اقلام پیشنهادی، بر اساس این اصل که، کاربرانی، مشابه کاربر فعال، از آنها رضایت داشته‌اند تهیه می‌شود. از این رو واضح است که در روش محتوامحور، تمرکز بر روی یافتن شباهت بین اقلام بوده، در حالی که در CF، تمرکز روی یافتن شباهت بین کاربران است؛ بدین ترتیب که پیشنهادات در CF، بر اساس تشابه رفتاری کاربرفعال با کاربران دیگر صورت می‌گیرد و نه بر اساس تشابه ویژگی کالاهای پیشنهادی با ویژگی‌های کالاهای مورد علاقه وی (کاربر فعال). رویکرد محتوا محور یکی از روشهای مؤثر برای حلی نوعی از مشکل شروع سرد می‌باشد که برای کالاهای (آیتم‌های) جدید رخ می‌دهد (New Item problem)[۵] که به تازگی به لیست سیستم اضافه شده‌اند و هیچ کاربری در مورد آنها نظری نداده است. در چنین حالتی رویکرد صافی سازی تجمعی نمی‌تواند این کالاها را به کاربران توصیه کند.

اما گونه سوم این سیستم‌ها را با نام سیستم‌های دانش محور می‌شناسند. این سیستم‌ها براساس ادراکی که از نیازهای مشتری و ویژگی‌های کالاها پیدا کرده‌اند، توصیه‌هایی را ارائه می‌دهند. به عبارتی در این گونه از سیستم‌های توصیه‌گر مواد اولیه مورد استفاده برای تولید لیستی از پیشنهادها، دانش سیستم در مورد مشتری و کالا است. سیستم‌های دانش محور از متدهای مختلفی که برای تحلیل دانش، قابل استفاده هستند بهره می‌برند که متدهای رایج در الگوریتم‌های ژنتیک، فازی، شبکه‌های عصبی و … از جمله آنهاست. همچنین، در این گونه سیستم‌ها از درخت‌های تصمیم، استدلال نمونه‌محور و … نیز می‌توان استفاده کرد. یکی از رایج‌ترین متدهای تحلیل دانش درسیستم‌های توصیه‌گر دانش محور ،CBR یا روش استدلال نمونه‌محور است.

گونه چهارم سیستم‌های ترکیبی هستند. طراحان این نوع سیستم‌ها دو یا چند گونه از انواع سه‌گانه مذکور را غالباً به دو منظور با هم ترکیب می‌کنند؛ ۱- افزایش عملکرد سیستم ۲- کاهش اثر نقاط ضعفی که آن سیستم‌ها وقتی به تنهایی به کار گرفته شوند، دارند. از میان سه روش موجود (CF و CB و KB)، غالباً روش CF یک پای ثابت این ترکیبات است.

منبع


سیستم توصیه گر (Recommender Systems) چیست ؟

 

سیستم توصیه گر

 

 

سیستم توصیه گر

 

سیستم توصیه گر (Recommender System) قسمت 1
سیستم توصیه گر (Recommender System) قسمت 2
سیستم توصیه گر (Recommender System) قسمت 3

پردازش گفتار

پردازش گفتار(صوت) – فناوری تشخیص گفتار نرم‌افزاری است که قادر است صوت را به متن تبدیل کند. فناوری تشخیص گفتار به رایانه‌ای که توانایی دریافت صدا را دارد برای مثال به یک میکروفن مجهز است این قابلیت را می‌دهد که صحبت کاربر را متوجه شود. این فناوری در تبدیل گفتار به متن یا به عنوان جایگزین برای ارتباط با رایانه کاربرد دارد. برقراری ارتباط گفتاری با رایانه‌ها به جای استفاده از صفحه کلید و ماوسیکی از زمینه‌های تحقیقاتی مهم چند دههٔ اخیر است و شرکت‌های بزرگی چون مایکروسافت ٫فیلیپس ٫ ای ال ای تی ٫ ای بی ام ٫سالانه هزینه‌های هنگفتی را برای این منظور پرداخت کرده و می‌کنند.

از جمله محدودیت‌های این نرم‌افزار این است که کلماتی که در این نرم‌افزار وجود دارد کلماتی است که از قبل به نرم‌افزار معرفی شده‌است. ضمن ان که در این نرم‌افزار کلمات محاوره‌ای قابل شناسایی نیست. از جمله کاربردهای این نرم‌افزار در ادارات و سازمان‌ها برای کاهش به کارگیری نیروی انسانی بهره برد. همچنین افزایش امنیت نیز یکی دیگر از قابلیت‌های استفاده از این نرم‌افزار است.

مقدمه

هدف بلند مدت سیستم‌های بازشناسی خودکار گفتار‚ طراحی ماشینی است که سیگنال صوتی مربوط به یک جملهٔ بیان شده را به دنباله‌ای از کلمات نوشته شده تبدیل نماید. سیستم‌های بازشناسی خودکار گفتار اطلاعات متنوعی ازمنابع دانش گوناگون را در جهت دستیابی به جملهٔ بیان شده از روی سیگنال صوتی دریافت شده، به کار می‌گیرند. پردازش گفتار به عنوان یکی از زیر شاخه‌های پردازش سیگنال ٫ به سرعت در حال گسترش است. تکنیک‌های پیچیده و نوآوری‌های روز افزون این دانش٫همگی در راستای دستیابی به این ارزو هستند که امکان بیابیم مفاهیم در قالب ابزارهای ریاضی فراهم گردد. در این مقاله٫به بیان خلاصه‌ای از انواع روش‌های پردازش گفتار می‌پردازیم:

۱-تحت تاثیر قرار گرفتن کیفیت سیگنال صوتی به وسیلهٔ نویز محیط و تابع انتقال سیستم انتقال مانند میکروفن، تلفن

۲-عدم وضوح مرز ما بین کلمات و واج‌ها در سیگنال صوتی

۳-تنوع وسیع سرعت بیان

۴-دقت ناکافی در بیان کلمات و به خصوص انتهای انها در گفتار محاوره‌ای نسبت به گفتار مجزا.

۵-تاپیر تنوعات متعدد گوینده از جمله جنسیت، شرایط فیزیولوژیک و روانی بر گفتار.

۶-به کارگیری محدودیت‌های معنایی-نهوی زبان برای گفتار زبان طبیعی به روشی مشابه ارتباط انسان با انسان در سیستم بازشناسی.

در جهت غلبه بر مشکلات مذکور تاکنون روش‌های متنوعی پیشنهاد شده‌است که از جمله انها روش‌های اماری مبتنی بر قانون تصمیم گیری بیز، روش‌های مبتنی بر شبکهٔ عصبی و در برخی موارد ترکیب روش‌های اماری و شبکهٔ عصبی است. با بررسی روش‌های فوق می‌توان دریافت که شناسایی کلمه یا واج بدون خطا بدون استفاده از دانش سطوح بالاتر به خصوص در بازشناسی گفتار پیوسته با حجم لغت نامهٔ بزرگ، امکان پذیر نیست. به عنوان یک نتیجه ‚یک سیستم بازشناسی گفتار که با انبوهی از فرض‌ها دربارهٔ واج ها، کلمات و معانی و ادراک مشخص می‌شود‚در نظر بگیرد.

در سیستم‌های مبتنی بر قانون تصمیم گیری بیز برخی از این محدودیت‌ها توسط مدل زبانی به سیستم بازشناسی اعمال می‌شود. نتایج مطالعات و بررسی‌ها نشان داده‌است که مدل‌های زبانی که در حالت کلی توالی واحدهای زبانی را مدل می‌کنند، در کاهش خطای بازشناسی نقش عمده‌ای ایفا می‌کنند. در این میان، استفاده از مدل‌های زبانی مبتنی بر شبکه‌های عصبی با وجود قابلیت این شبکه‌ها در یادگیری زنجیره نمادها و نیز به دلیل قابلیت هموارسازی و خاصیت تعمیم دهی آنها بر روش‌های اماری مزیت دارد.

تولید نرم‌افزار ترجمه گفتار

از جمله قابلیت‌های این نرم‌افزار این است که این نرم‌افزار قادر است فایلهای WAV،mp3 را مستقل از صدای گوینده به متن تبدیل کند ولی کیفیت ان کمتر از ان است که صدای فرد را به نرم‌افزار معرفی کنیم. از دیگر قابلیت‌های سیستم‌های گفتاری می‌توان به ترجمهٔ گفتار به سایر زبان‌ها اشاره کرد. از این قابلیت در جنگ امریکا و عراق استفاده شد. امریکایی‌ها سیستم‌هایی را طراحی و تولید کردند که قادر بود کلام عربی را به انگلیسی ترجمه کند. همچنین در انجام اقدامات امنیتی بهره برداری می‌کنند که می‌تواند کلمات کلیدی را برای این نرم‌افزار شناسایی کرد تا نسبت به ان کلمه خاص حساس شود تا در صورت استفاده از آن، سیستم این کلمات را رکورد کند. این قابلیت در سال ۱۹۹۴ در آمریکا طراحی و تولید شد و در سیستم‌های تلفنی به کار گرفته شد. در حال حاضر این نرم‌افزار طراحی و تولید شده‌است به گونه‌ای که در متن و گفتار کاربر، کلمهٔ خاصی را می‌توان فعال کرد و این نرم‌افزار می‌تواند ان کلمه را جستجو کند و کلمهٔ عبور کاربر ذخیره شود.

کاربردهای نرم‌افزار تشخیص گفتار (پردازش گفتار)

به عنوان یک کاربر رایانه، احتمالا با قابلیت گفتاری مجموعهٔ افیس به عنوان یکی از ویژگی‌های جذاب و تا حدی فانتزی برخورد کرده یا با ان کار کرده‌اید. به کمک این قابلیت شما به جای استفاده از صفحه کلید برای تایپ مطالبتان ‚به راحتی با خواندن متن مورد نظرتان و انتقال گفتارتان به کمک یک میکروفن معمولی به رایانه ‚مطلب مورد نظرتان را تایپ شده می‌بینید. حتی برای ذخیره کردن، کپی کردن، گذاشتن عکس در متن… به جای کلیک‌های پشت سر هم و گاهی با تعداد بالا، می‌توانید فرمان مربوطه را به کمک گفتار به نرم‌افزار داده تا کار شما را انجام دهد. جدای از اینکه توانایی درست کار کردن این قابلیت افیس چقدر باشد‚یک محدودیت بزرگ در سر راه استفاده از ان برای ما ایرانیان وجود دارد ‚این قابلیت فقط برای زبان انگلیسی است.(البته زبان‌های چینی و ژاپنی را نیز شامل می‌شود!).

ایجاد چنین سیستمی که ان را تشخیص یا بازشناسی گفتار می‌نامند، در زبان فارسی، چندین سال از تحقیقات محققان ¸اساتید و دانشجویان دانشگاه‌های مختلف کشور را به خود اختصاص داده‌است. اما جدی‌ترین جهشی که در حدود ده سال پیش در این زمینه ایجاد شد، ایجاد دادگان گفتاری فارسی دات و یک سیستم اولیه تشخیص گفتار فارسی در مرکز هوشمند علائم بوده‌است. در ادامه و در طی یکی –دو سال اخیر ¸مهم‌ترین دستاورد در این تکنولوژی برای زبان فارسی، سیستم‌های تشخیص است. در کاربردهایی مانند تشخیص گفتار تلفنی ‚سیستم لزوما باید مستقل از گوینده باشد.

در کاربردهای واقعی معمولاً سیستم را مستقل از گوینده می‌سازند و موقع استفاده به صدای گوینده خاصی ان را اصطلاحا تطبیق می‌کنند این کار در قابلیت گفتاری مجموعه افیس به کمک خواندن متون اولیه در ویزارد سیستم انجام می‌شود ‚چنین قابلیتی در سیستم نویسا نیز وجود دارد. هر چه تعداد واژگانی که سیستم می‌تواند تشخیص دهد بیش تر باشد، شباهت میان کلمات بیش تر باشدو در نتیجه کارایی سیستم به علت افزایش اشتباهات کاهش پیدا می‌کند. از این رو در کاربردهای واقعی معمولاً فقط واژگان متناسب با کاربردهای موردنظر را انتخاب می‌کنند تا محدود شود. در قابلیت گفتاری افیس هم که ادعا می‌شود اکثر کلمات انگلیسی را دارد٫ کارایی به شدت پایین است(کارایی پایین آن به علت این است که ما غیر انگلیسی زبان هستیم!)ولی در محصولات محدودتر این شرکت کارایی به مراتب بهتر است.

گفتار کاربر می‌تواند پیوسته و طبیعی یا با مکث میان کلمات همراه باشد٫ بدیهی است که حالت اول مطلوب هر کاربری است. یکی از مشکلاتی که محصولات نویسا و نیوشا تا حد زیادی ان را حل کرده‌اند٫استخراج و به کارگیری قابلیت‌های زبان ٫زبان فارسی در حد نسبتا کاملی است. این اطلاعات زبانی می‌تواند در سایر نرم‌افزارهایی که نیاز به اطلاعات زبانی دارند٫مانند مترجم‌ها نیز به کار گرفته می‌شود. اثر صداهای اضافی و ناخواسته در کاربردهای واقعی نرم‌افزارهای ocr نرم‌افزارهای تشخیص گفتار را در عمل دچار افت شدید کارایی می‌نماید٫در محصولات فارسی ارائه شده با رویکردهای مختلفی این نقصان را تا حد زیادی جبران کرده‌است.

تکنولوژی بازشناسی گفتار

تکنولوژی بازشناسی گفتار ٫ شیوه‌ای جدید برای تشخیص پیام هاو دستورهای صوتی و حاصل پژوهش جمعی از متخصصین دانشگاه صنعتی شریف در زمینهٔ پردازش گفتار است. نگارندگان این مقاله ٫ توانسته‌اند نرم‌افزارهای طراحی و پیاده سازی کنند که بتواند قابلیت‌های طرح را در سیستمی که از لحاظ سخت‌افزاری کوچک و از نظر هزینه مقرون به صرفه‌است٫پیاده سازی کند. ویژگی‌های منحصر به فرد این طرح٫ان را از جدیدترین فناوری‌های موجود دنیا در زمینهٔ پردازش گفتار٫متمایز می‌کند.

از جمله ویژگی‌های این طرح می‌توان به موارد زیر اشاره کرد:

  • قابل اجرا بر روی رایانه یا سخت‌افزاری مستقل
  • سهولت استفاده
  • هزینه اندک پیاده سازی
  • عدم وابستگی به هیج نوع زبان با گویشی
  • عدم حساسیت به سروصدای محیط
  • امکان تعریف دستورهای صوتی، مطابق با سلیقه کاربرد

فناوری بازشناسی گفتار، بر پایه این ویژگی‌ها در طیف گسترده‌ای از محصولات قابل استفاده‌است. نمونه‌هایی از زمینه‌های کاربرد آن عبارتند از:

  • خودرها
  • لوازم خانگی الکتریکی و الکترونیکی
  • اسباب بازی‌ها، عروسک‌ها و سرگرمی‌های رایانه‌ای
  • سیستم‌های دیتار افراد کم توان و سالخورده
  • نرم‌افزارهای رایانه‌ای مدیریتی
  • سیستم‌های آموزش زبان

به عنوان نمونه از این نرم‌افزار در دادن فرامین صوتی به خودرو ویژه هنگامی که راننده مشغول رانندگی است و نمی‌تواند کاربری دیگری انجام دهد، استفاده می‌شود فرامین صوتی شامل موارد ذیل می‌شوند:

۱- تنظیم آینه‌های بغل و عقب

۲- کنترل بالابر شیشه‌ها

۳- کنترل قفل کودک

۴- کنترل روغن ترمز و موتور یا بنزین در حال حرکت

۵- کنترل رادیو یا هر نوع رسانه دیگر در خودرو

۶- کنترل برف پاک کن‌ها

۷- تنظیم صندلی‌ها

۸- کنترل چراغ‌ها

۹- هر نوع دستور دیگر که انجام آن نیازمند حرکت اضافی راننده یا سرنشینان است.

این نرم‌افزار، به خوبی در محیط پرنویز، عمل می‌کند مثلاً در خودرویی با سرعت ۱۰۰ کیلومتر در ساعت با شیشه‌های باز و در بزرگراه تست شده و پاسخ مناسب گرفته‌است. دیگر مزیت این نرم‌افزار، حجم بسیار پایین آن است که به راحتی قابل برنامه ریزی برروی یک ای سی است (نسخه دمو روی pc) به راحتی تا ۱۰۰ فرمان را پردازش می‌کند) نرم‌افزار مورد بحث، با این مشخصات در ایران مشابه ندارد و موارد موجود در دنیا نیز مانند فرمانی توسط صدا حداقل نیاز به پردازنده پنتیوم با حجم زیاد حافظه دارند. نکته دیگر اینکه این نرم‌افزار، هوشمند بوده و قابل آموزش دادن است و پس از آموزش (مثلاً با صدای اعضای یک خانواده) صدار هرکدام از آنها را که بشنود (و در کل هر زمانی که کلمه یا فرمانی را بشنود) مستقل از این که چه کسی آن را ادا کرده‌است (صدای زن یا مرد، کلفت یا نازک) فرمان را اجرا می‌کند.

دیگر مزیت این نرم‌افزار، حجم بسیار پایین آن است که به راحتی قابل برنامه ریزی بر روی یک ای سی است (نسخه دمو روی کامپیوتر جیبی به راحتی تا ۱۰۰ فرمان را پردازش می‌کند. نرم‌افزار مورد بحث با این مشخصات در ایران مشابه ندارد و موارد موجود در دنیا نیز مانند وویس کامند در میکروسافت افیس٫حداقل نیاز به پردازنده پنتیوم با حجم زیاد حافظه دارند نکته دیگر اینکه این نرم‌افزار هوشمند بوده و قابل آموزش دادن است و پس از آموزش (مثلاً با صدای اعضای یک خانواده) صدای هر کدام از آنها را که بشنود (و در کل هر زمانی که کلمه یا فرمان را بشنود) مستقل از اینکه چه کسی آن را ادا کرده‌است (صدای زن با مردن، کلفت یا نازک) فرمان را اجرا می‌کند.

گزارش طرح نرم‌افزار فناوری بازشناسی گفتار (پردازش گفتار)

۱- عنوان طرح: فناوری بازشناسی گفتار مقاوم در برابر نویز ۲- توضیح عمومی و کاربرد: با استفاده از این فناوری، صدای ضبط شده توسط یک میکروفون بازشناسی شده و به فرامین برای یک دستگاه الکترونیکی یا رایانه، تبدیل می‌شوند حوزه کاربرد این فناوری تمامی دستگاه‌های الکتریکی، الکترونیکی و رایانه‌ای است که به طریقی از کاربر فرمان می‌گیرند. تمام فرامین قابل بیان با استفاده از مجموعه متناهی کلمات گسسته را می‌توان با استفاده از این فناوری توسط میکروفون به دستگاه یا رایانه داد.

۳- مزایا در مقایسه با دیگر فناوری‌های مشابه: مهمترین خصوصیات این فناوری نیاز به توان پردازشی بسیار کم و مقاومت بسیار زیاد در مقابل سرو صدای محیط (نویز) است.

۴- شرح طرح: روش ارائه شده از سه بخش اصلی تشکیل شده‌است

الف ـ بخش اول که وظیفه تبدیل سیگنال صوتی به داده‌های قابل پردازش را برای دو بخش دیگر انجام می‌دهد.

ب ـ بخش دوم که وظیفه یادگیری و توصیف کلمات را بر عهده دارد و با گرفتن نمونه‌های ضبط شده کلمات، الگوهای لازم برای بخش بازشناسی را می‌سازد.

ج ـ بخش سوم که داده‌های گرفته شده از بخش اول را با الگوهایی که در بخش دوم یاد گرفته شده‌اند مقایسه می‌کرده و شبیه‌ترین کلمه را انتخاب می‌کند.

استخراج ویژگی‌ها از سیگنال صدا:

اولین مرحله در مراحل یادگیری و بازشناسی استخراج ویژگی‌ها از سیگنال صداست. برای انجام این کار باید مراحل زیر را طی کرد:

۱- استخراج اسپکتروگرام صدا

۲- اعمال فیلترهای فیوژن ماکسیمم –ان بر روی فریم‌های اسپکتروگرام تولید شده

۳- اعمال فیلترهای شناسایی یکنواختی در طول اسپکتروگرام

الف ـ اولین مرحله در بازشناسی صدا، تبدیل سیگنال صدای ورودی به اسپکتروگرام با طول محدود است برای این کار با استفاده از الگوریتم استاندارد تبدیل سریع فوریه تبدیلات فوریه پنجره‌هایی به طول ۵۱۲ صدای ضبط شده با ۱۲۸ فریم همپوشانی گرفته و در کنار یکدیگر قرار داده می‌شود در پایان این مرحله، سیگنال یک بعدی صدا به تصویری دوبعدی تبدیل می‌شود

ب ـ سومین مرحله از بخش استخراج خصوصیات، فشرده سازی اسپکتروگرام در طول محور فرکانس است پس از اعمال این الگوریتم، مراحل تبدیل داده خام (سیگنال صدا) به داده آماده بازشناسی با یادگیری، تمام شده و می‌توان به یکی از دو بخش بعدی رفت. یادگیری برای یادگیری الگوی هر کلمه یک یا چند نمونه از ان کلمه به بخش یادگیری داده می‌شود اگر تنها یک نمونه از کلمه وجود داشته باشد آن نمونه به عنوان الگوی خروجی انتخاب می‌شود در غیر این صورت از الگوریتم کا مینز۱ برای به دست آوردن الگوهای مناسب برای دسته بندی تمامی کلمات داده شده استفاده می‌شود

بازشناسی الگوها

در این بخش الگوریتم مقایسه یک ورودی صوتی با الگوی کلماتی که از قبل یاد گرفته شده‌اند ارائه می‌شود برای این کار الگوریتم مقایسه کشسان (۱) ارائه می‌شود. برای تصمیم گیری نهایی ورودی این بخش با تمام کلماتی که قبلاً یاد گرفته شده‌اند توسط این الگوریتم مقایسه شده و کلمه‌ای که بیشترین تطابق را داشته باشد به عنوان جواب انتخاب می‌شود. الگوریتم مقایسه کشسان ساختاری مشابه ماشین حالات محدود (۲) دارد با ۳ تفاوت مهم زیر (از این به بعد این الگوریتم را ماشین تطبیق دهندهٔ قابل انعطاف یاEMM می‌نامیم.) 1- بر خلاف EMM، FSM ممکن است بیش از یک حالت فعال در هر زمان وجود داشته باشد تعداد حالات فعال در زمان‌های مختلف نیز متفاوت است. در صورتی که یک EMM به وضعیتی برسد که هیچ حالت فعالی نداشته باشد به پایان کار خود رسیده‌است. 2- در EMM حالات فعال به جز شماره حالت خصوصیات دیگری نیز دارند. فهرست این خصوصیات عبارتند از:

الف ـ میزان تطابق وضعیت (۳)‌های قبلی: این معیار مشخص می‌کند که اگر اکنون در وضعیت N ام ماشین باشیم. N-1 وضعیت قبلی با چه درجه تطابقی شناسایی شده‌است.

ب ـ میزان تطابق وضعیت قبلی: این معیار، بیانگر میزان تطابق درست بین ورودی‌هایی که به این وضعیت انتساب داده شده‌اند با الگوریتم خواسته شده برای این وضعیت است.

3- در EMM مشابه ماشین‌های حالت محدود غیرقطعی (۴) با یک ورودی و از یک وضعیت ممکن است توان حرکت به بیش از یک وضعیت دیگر وجود داشته باشد در چنین حالتی تمامی وضعیت‌های بعدی همزمان تولید و پیموده می‌شوند.

روش کار EMM به این شکل است که برای مقایسه یک کلمه (الگو) با یک ورودی Ii فریم‌های خروجی بخش پیش پردازش اطلاعات (۱-۴) برای ورودی و Pi فریم‌های خروجی بخش یادگیری برای الگو خوانده خواهند شد. برای این کار یک EMM ساخته می‌شود که به اندازه فریم‌های الگو وضعیت دارد و انتقال بین وضعیت‌ها فقط در طول محور فریم‌های الگو قابل انجام است به این ترتیب با خواندن هر فریم ورودی (Ii) یا باید در وضعیت سابق الگو بمانیم یا به وضعیتی بعد از آن منتقل شویم. به این ترتیب با رسیدن هر فریم ورودی هر وضعیت فعلی فعال EMM به دو وضعیت جدید تبدیل می‌شود اما باید به طریقی از این افزایش نمایی جلوگیری کرد برای این کار وضعیت‌هایی که درجه شناسایی درستشان از حد خاصی کمتر باشد حذف می‌شوند.

تلفن همراه SPH-P۲۰۷ ساخته شرکت سامسونگ دارای نرم‌افزاری تشخیص گفتار است. که براین اساس به پیام‌های گفتاری سریعتر از تایپ کردن آنها روی صفحه شماره گیری جواب می‌دهد وظیفه اصلی این تلفن بی سیم تبدیل گفتار انسان به سیگنال‌های دیجیتالی و بالعکس می‌باشد تلفن SPH-P۲۰۷ سامسونگ اولین تلفنی است که از فناوری تشخیص گفتار برای دیکته یک متن استفاده میشود.

 

پردازش سیگنال دیجیتال (DSP) با نمایش سیگنال به وسیله توالی اعداد یا نشانه‌های پردازش چنین سیگنالی در ارتباط است. پردازش سیگنال دیجیتال (گسسته) و پردازش سیگنال پیوسته، زیرمجموعه‌هایی از پردازش سیگنال هستند. از کاربردهای عملی DSP میتوان به پردازش صوت و پردازش سیگنال صحبت، پردازش سیگنال سونار و رادار، پردازش آرایه‌های حسگر، پردازش سیگنال آماری، پردازش تصویر دیجیتال، پردازش سیگنال های مخابراتی، کنترل سیستم‌ها، پردازش سیگنال های بیولوژیک اشاره نمود.

هدف DSP، معمولاً اندازه‌گیری، فیلتر و فشرده سازی سیگنال‌های پیوسته (آنالوگ) دنیای واقعی است. اولین قدم در این راه تبدیل سیگنال از شکل آنالوگ به دیجیتال است، که به وسیله نمونه برداری توسط مبدل آنالوگ به دیجیتال (ADC) انجام می‌شود. وظیفه مبدل مذکور تبدیل سیگنال آنالوگ به رشته‌ای از اعداد است. اما، از آنجا که معمولاً سیگنال خروجی در سیستم مورد نظر باید به صورت یک سیگنال آنالوگ باشد، در آخرین گام پردازش، به یک مبدل دیجیتال به آنالوگ نیاز خواهیم داشت. حتی اگر این پردازش از پردازش آنالوگ بسیار پیچیده‌تر باشد، کاربرد قدرت محاسباتی در پردازش سیگنال دیجیتال، مزایای بسیاری را نسبت به پردازش آنالوگ در زمینه‌های مختلف به ارمغان می‌آورد؛تشخیص و تصحیح خطا در انتقال و همچنین فشرده‌سازی داده مثال هایی از برتری استفاده از روش های پردازش سیگنال گسسته هستند.

الگوریتم‌های DSP مدت زیادی است که در کامپیوترهای استاندارد همه منظوره، یا بر روی پردازش‌گرهای معروف به پردازشگرهای سیگنال دیجیتال (DSP) یا با استفاده از سخت‌افزارهای خاص مثلمدارهای مجتمع با کاربرد خاص (ASIC) اجرا می‌شوند. امروزه تکنولوژی‌های دیگری نیز برای پردازش سیگنال دیجیتال مورد استفاده قرار می‌گیرند که شامل میکروپروسسورهای چندمنظوره قدرتمند،اف‌پی‌جی‌ای (FPGA)، کنترل‌کننده سیگنال دیجیتال (بیشتر برای کاربردهای صنعتی مثل کنترل موتور) هستند.

حوزه‌های DSP

در DSP، مهندسین معمولاً به مطالعه سیگنال دیجیتال در یکی از حوزه ها زیر می‌پردازند: حوزه زمان (سیگنال‌های یک بعدی)، حوزه فضایی (سیگنال‌های چندبعدی)، حوزه فرکانس، حوزهخودهمبستگی، و حوزه موجک. برای پردازش این سیگنال ها، حوزه‌ای انتخاب میشود که در آن بتوان خصوصیات اصلی سیگنال را به بهترین شکل نمایش داد و با استفاده از اطلاعات حاضر، به بهترین صورت، سیگنال را پردازش کرد. توالی نمونه‌هایی که از اندازه‌گیری خروجی یک وسیله به دست می‌آید یک نمایش در حوزه زمان یا حوزه فضا را تشکیل می‌دهد، در حالی که تبدیل فوریه گسسته‌زمان، اطلاعات را در حوزه فرکانس تولید می‌کند (همان طیف فرکانسی). همبستگی خودکار را همبستگی متقابل سیگنال با خودش بر روی فاصله‌های متغیر زمان یا فضا تعریف می‌کنند.

نمونه‌برداری از سیگنال

با گسترش استفاده از رایانه، نیاز و استفاده از پردازش سیگنال دیجیتال نیز گسترش یافته‌است. برای استفاده از سیگنال آنالوگ در یک رایانه، ابتدا باید سیگنال توسط مبدیل دیجیتال دیجیتال شود.

نمونه‌برداری معمولاً در دو مرحله انجام می‌شود : گسسته‌سازی و مدرج کردن. در مرحله گسسته‌سازی، فضای سیگنال (فضایی که سیگنال در آن وجود دارد) به کلاس‌هاس هم‌ارز افراز می‌شود و مدرج کردن نیز با جایگزینی سیگنال اصلی با سیگنال متناظر در کلاس‌های هم‌ارز انجام می‌پذیرد.

در مرحله مدرج کردن، مقادیر سیگنال نماینده (به انگلیسی: Representative Signal) توسط مقادیر زیر مجموعه یک مجموعه متناهی تقریب زده می‌شوند.

قضیه نمونه‌برداری نایکوئیست-شنون بیان می‌کند که سیگنال را می‌توان از روی سیگنال نمونه‌برداری شده به طور دقیق بازسازی کرد، اگر فرکانس نمونه‌برداری بزرگتر از دو برابر بالاترین مؤلفه فرکانسی سیگنال باشد. در عمل، غالباً فرکانس نمونه‌برداری را بزرگتر از دو برابر پهنای باند لازم در نظر می‌گیرند.

یک مبدل دیجیتال به آنالوگ به منظور تبدیل معکوس سیگنال به حالت آنالوگ مورد استفاده قرار می‌گیرد. استفاده از یک کامپیوتر دیجیتال مقوله کلیدی در سیستم‌های کنترل دیجیتال است.

مفهوم حوزه‌ی زمان و فرکانس

متداول ترین تکنیک پردازش سیگنال در حوزه ی زمان و فضا (مکان)، بهسازی (بهبود) سیگنال از طریق فیلترینگ است. فیلترینگ دیجیتال عبارت از اعمال تبدیل های خطی بر نمونه هایی از سیگنال است که در همسایگی نمونه ی فعلی در سیگنال ورودی یا خروجی واقع شده اند. به روش های مختلفی میتوان این فیلترها را دسته بندی نمود:

  • “فیلتر خطی”: یک تبدیل خطی است که بر روی نمونه های ورودی اعمال میشود؛ سایر فیلترها “غیرخطی” هستند. فیلترهای خطی از قاعده ی جمع آثار پیروی میکنند؛ به این معنی که اگر یک سیگنال ورودی، ترکیب وزنداری از سیگنال های مختلف باشد، سیگنال خروجی از ترکیب خطی خروجی های همان سیگنال ها، با وزنهای مشابه ورودی، حاصل میشود.
  • “فیلتر علی”: فیلتر علی فقط از نمونه های قبلی در سیگنال های ورودی و خروجی استفاده میکند. اما، در فیلترهای “غیرعلی”، نمونه های آینده ی ورودی نیز به کار گرفته می شوند. با اضافه کردن تأخیر به یک فیلتر غیرعلی میتوان آنرا به یک فیلتر علی تبدیل نمود.
  • “فیلتر غیر متغیر با زمان”: ویژگی های این فیلتر با زمان تغییر نمیکند. اما، فیلترهایی مانند فیلتر تطبیقی، با زمان تغییر میکنند.
  • “فیلتر پایدار”: خروجی یک فیلتر پایدار با گذشت زمان به یک مقدار ثابت همگرا میشود یا در محدوده ی متناهی باقی می ماند. اما، یک فیلتر “ناپایدار” در پاسخ به یک ورودی محدود (متناهی) یا حتی صفر، ممکن است منجر به تولید خروجی هایی نامتنهای شود.
  • “فیلتر با پاسخ ضربه ی محدود (FIR)”: این فیلتر فقط از نمونه های سیگنال ورودی استفاده میکند، اما، فیلتر با پاسخ ضربه ی نامحدود (IIR) علاوه بر نمونه های ورودی، از نمونه های گذشته ی خروجی نیز استفاده میکند. فیلترهای FIR همواره پایدار هستند، اما، فیلترهای IIR ممکن است ناپایدار شوند.

فیلترها را میتوان به روشهای مختلفی بازنمایی کرد: 1- با استفاده از دیاگرام بلوکی برای نشان دادن مراحل مختلف الگوریتم به منظور ایجاد یک دستورالعمل برای پیاده سازی سخت افزاری فیلتر. 2- با توصیف فیلتر با استفاده از معادلات تفاضلی یا به کمک مجموعه ی قطب ها و صفرهای سیستم. برای فیلترهای FIR، میتوان از پاسخ های ضربه یا پله نیز برای توصیف فیلتر استفاده کرد.

خروجی یک فیلتر دیجیتال خطی به یک ورودی خاص، از کانولوشن سیگنال ورودی با پاسخ ضربه ی فیلتر، حاصل میشود.

با استفاده از تبدیل فوریه میتوان سیگنال ها را از حوزه ی زمان (مکان) به حوزه ی فرکانس منتقل نمود. تبدیل فوریه، اطلاعات سیگنال را به دامنه (اندازه) و فاز مؤلفه های فرکانسی موجود در سیگنال، تبدیل میکند. در عمل، اغلب، از تبدیل برای فوریه برای محاسبه ی طیف توان سیگنال استفاده میشود که مربع دامنه ی (اندازه) هر مؤلفه ی فرکانسی است.

با انتقال سیگنال از حوزه ی زمان به حوزه ی فرکانس، میتوان شدت و ضعف مؤلفه های فرکانسی موجود در سیگنال را شناسایی و ارزیابی کرد. در حوزه ی فرکانس، علاوه بر دامنه ی مؤلفه های فرکانسی، فاز آنها و نیز چگونگی تغییر فاز با تغییر فرکانس، میتواند حاوی اطلاعات مهمی باشد.

فیلترینگ سیگنال، به ویژه در کابردهای غیر زمان واقعی (non- real time)،میتواند با انتقال سیگنال به حوزه ی فرکانس و اعمال یک فیلتر مناسب بر آن و سپس برگرداندن سیگنال حاصل به حوزه ی زمان انجام شود. این عملیات، سریع بوده (زمان اجرا متناسب است با (n log n) ) و می توان فیلتر را با تقریب خوبی به شکلهای مختلف طراحی نمود.

در حوزه ی فرکانس، تبدیل های متداولی وجود دارند که از میان آنها میتوان به cepstrum اشاره نمود. در این تبدیل، ابتدا با استفاده از تبدیل فوریه، سیگنال، به حوزه ی فرکانس منتقل میشود و سپسلگاریتم آن محاسبه میگردد. در نهایت، با اعمال تبدیل معکوس فوریه، سیگنال حاصل به حوزه ی زمان بازگردانده میشود. این عملیات، ساختار هارمونیکی طیف اصلی را نشان میدهد.

تحلیل حوزه ی فرکانس با عنوان تحلیل طیف نیز شناخته میشود.

بسط فوریه و مفهوم حوزه زمان (منحنی قرمز) و فرکانس (منحنی آبی).

تحلیل در حوزه {\displaystyle Z\,}

در حالی که فیلترهای آنالوگ معمولاً در صفحه{\displaystyle s\,} تحلیل می‌شوند، فیلترهای دیجیتال در صفحه {\displaystyle z\,} یا حوزه دیجیتال و با استفاده از تبدیل {\displaystyle Z\,} تحلیل می‌شوند.

بسیاری از فیلترها را می‌توان در حوزه{\displaystyle Z\,} (یک فرامجموعه از اعداد مختلط در حوزه فرکانس) توسط تابع تبدیلشان تحلیل کرد. یک فیلتر می‌تواند توسط مجموعه مشخصه‌اش شامل صفرها و قطب‌ها در حوزه{\displaystyle z\,} تحلیل شود.

کاربردها

بیشترین کاربردهای DSP شامل پردازش سیگنال صوتی، فشرده‌سازی داده‌های صوتی، پردازش تصویر دیجیتال، فشرده‌سازی ویدیو، پردازش صدا، تشخیص صدا، ارتباط دیجیتال، رادار، سونار، زلزله‌شناسی و داروسازی است. مثال‌های خاص شامل فشرده‌سازی صحبت و انتقال در تلفن همراه، هم‌نواسازی مطابق اتاق برای صدا در کاربردهای شباهت زیاد به اصل و تقویت صدا، پیش بینی وضع هوا، پیش‌بینی اقتصادی، پردازش داده زلزله، تحلیل و کنترل روال‌های صنعتی، انیمیشن‌های تولید شده توسط رایانه در فیلم‌ها، عکس‌برداری پزشکی مثل پویش‌های CAT و MRI، فشرده‌سازیMP3، دستکاری تصویر، هم‌نواسازی و هم‌گذری بلندگوهای با کیفیت بالا، و افکت صوتی برای تقویت‌کننده (الکترونیک) گیتار برقی است.

منبع

 

بهینه سازیبهینه‌سازی چیست؟

بهینه‌سازی یک مسئله ریاضی و کلی است که از قرن‌ها پیش مطرح بوده است و در حال حاضر هم یک مسئله و موضوع در دست بررسی و پژوهش است. هنوز راه حلی کلی برای تمام مسائل بهینه‌سازی مطرح نشده است. البته در بعضی موارد محدود که در آن تابع هدف کاملا مشخص شده و معین است و مسائلی مانند مشتق‌پذیری در آن وجود دارد؛ می‌توانیم بصورت دقیق آن را حل کنیم. در بعضی از مسائل هم جواب نهایی وجود دارد ولی زمان محاسبه آن بسیار زیاد طول خواهد کشید. با این حال هنوز برای بعضی از مسائل راه حل معقول و مشخصی ابداع نشده است. بر همین اساس، طبقه‌بندی‌های مختلفی برای اینگونه مسائل از لحاظ پیچیدگی و یا پارامترهای دیگر تعیین شده است. بطور مثال: مسائل برنامه‌ریزی خطی (LP)، برنامه‌ریزی غیر خطی (NLP)، مسائل درجه دوم (QP)، مسائل NP,NP-hard و…

بهینه سازی

مسئله فروشنده دوره‌گرد (TSP)

یکی از ساده‌ترین و در عین حال، پرکاربردترین و مفیدترین مسائل مطرح شده در حوزه بهینه‌سازی مسئله فروشنده دوره‌گرد (Traveling Salesman Problem) است.

در این مسئله فرض شده است که یک فروشنده دوره‌گرد قصد دارد N شهر را بگردد و برای این موضوع یک سری شرایط مطرح شده است. بطور مثال از یک شهر نباید دوبار عبور کرد و از همه شهرها باید یک بار عبور کند و دوباره به شهر اولیه برگردد. سوالی که اینجا پیش می‌آید و مورد بررسی قرار می‌گیرد این است که چگونه این فروشنده در کمترین زمان، این مسافرت را طی می کند و یا اینکه چگونه کمترین مسافت را در این سفر خواهد داشت؟

این مسئله در طبقه‌بندی مسائل NP-hard قرار می‌گیرد و روش‌های عادی نمی تواند پاسخی برای این مسئله پیدا کند. اما بعضی از الگوریتم‌های فراابتکاری و یا تکاملی، می‌توانند در این خصوص پاسخ نه کاملا بهینه اما نزدیک به آن را به ما بدهند.

این مسئله و حل آن می‌تواند در مسائل صنعتی زیادی به ما کمک کند و کاربرد داشته باشد. بطور مثال تعیین مسیر ربات‌هایی که کار سوراخ کردن فیبرهای مدار چاپی را انجام می‌دهند. و همچنین مسائل صنعتی دیگری مانند زمان‌بندی و…

بصورت کلی بیشتر سیستمهای زمان‌بندی و توزیع می‌توانند به نوعی از این مسئله الگوبرداری کنند. هر جا صحبت از ظرفیت است و می‌خواهیم از کمترین ظرفیت استفاده کنیم مسئله ما جایگشتی است و باید از روش و الگوی مسئله TSP کمک گرفته شود.

برای حل این مسئله باید تمام راه حل‌های ممکن و یا حداقل بیشتر آن‌ها بررسی شود تا به جواب و راه حل بهتر دست پیدا کنیم. مشکل ما در این بررسی، فاکتور زمان است. بطور مثال اگر در مسئله فروشنده دوره گرد N شهر داشته باشیم؛ N فاکتوریل هم راه حل خواهیم داشت.

بهینه سازی

ارتباط بهینه‌سازی و الگوریتم‌های فراابتکاری

بصورت کلی در حل مسائل بهینه‌سازی، مشکلی که ما با آن روبرو هستیم این است که یک مسئله دارای بی‌نهایت راه حل و پاسخ باشد و ما باید بهترین پاسخ را در بین آنها پیدا کنیم. در واقع عمل جستجو (search) و بهینه‌سازی (optimization) در این مسائل بکار برده می شوند و از یک نوع معقوله و در راستای هم هستند و الگوریتم‌هایی در این جا کاربردی تر هستند که یک بخش عمده پاسخ‌ها را بررسی کنند و در بین آنها به جواب نهایی برسند.

بهترین و کارآمدترین الگوریتم‌ها باید یک سری ویژگی‌ها را داشته باشند. بطور مثال: قابلیت کشف و جستجوی بالا (exploration) و قابلیت استخراج کردن (exploitation)

الگوریتم‌های بهینه‌سازی کلاسیک، اغلب این قابلیت‌ها را به صورت متعادل ندارند. بطور مثال قابلیت Global search برای استخراج کردن را ندارند. مکانیزم این گونه الگوریتم‌ها Local search است. همچنین الگوریتم‌های Random search (جستجوی تصادفی) در این بین هستند که Global search خوبی دارند ولی در نهایت نمی توانند به همگرایی مورد نیاز برسند. در واقع روشی که در بین این الگوریتم‌ها بصورت هوشمندانه عمل کند و در نهایت به همگرایی برسد، همان الگوریتمهای فراابتکاری و تکاملی است.

بهینه سازی

الگوریتم ژنتیک

یکی از الگوریتم‌های تکاملی و فراابتکاری، الگوریتم ژنتیک است که از طبعیت ژنتیکی، وراثت، جهش در کروموزم ها و تئوری انتخاب داروین الگوبرداری کرده است. در این الگوریتم ابتدا یک سری جواب و پاسخ و یا راه حل مطرح می‌شود و بعد از آن، راه حل‌ها مانند اتفاقی که در زاد و ولد حیوانات می‌افتد با هم ترکیب می‌شوند. این موجودات یک سری از ویژگی‌های خودشان را برای فرزندانشان به ارث می‌گذارند. اگر فرزند از هر دو والد خود یعنی پدر و مادر، یک ویژگی خوب را به ارث ببرد، نتیجه و جواب بهتری خواهیم گرفت. این روش و الگوریتم نه به صورت کاملا Random و تصادفی و نه کاملا به صورت حریصانه عمل می‌کند و در واقع روشی بین این دو است و به همین علت یک روش کارآمد محسوب می شود.

در این روش نمی توان هم به همگرایی بالایی در کمترین زمان رسید و هم تمام مناطق را به صورت کامل جستجو کرد. با افزایش هر کدام از این پارامترها دیگری کاهش پیدا می کند. اما اغلب الگوریتمهای تکاملی، یک توازن نسبی بین این دو را برقرار کرده‌اند و منشا بیشتر و کارآمدترین آن‌ها طبیعت است.

دیگر الگوریتم‌های فراابتکاری

الگوریتم‌های دیگری نیز در حوزه بهینه‌سازی و محاسبات تکاملی مطرح شده اند مانند: الگوریتم مورچگان (ACO)، الگوریتم ازدحام ذرات (PSO)، الگوریتم کلونی زنبور عسل (ABC)، الگوریتم رقابت استعماری (ICA) و …

نقطه مشترک این الگوریتم‌ها، استناد به یک پدیده طبیعی و واقعی است. بطور مثال الگوریتم ازدحام ذرات از کوچ پرندگان و الگوریتم رقابت استعماری از روابط اجتماعی و انسانی الهام گرفته شده است و همین پدیده‌ها را تبدیل به یک مدل ریاضی و روش حل مسئله بهینه‌سازی می‌کنند.

همان طور که قبلا ذکر شد؛ مسئله بهینه‌سازی با عمل جستجو (search)، رابطه مستقیم دارد و ارتباط این موضوع با الهام گرفتن این الگوریتم‌ها از طبیعت به این صورت است که بطور مثال مورچگان، همیشه به دنبال بهترین منبع غذایی و ذخیره کردن آن هستند. زنبورها به دنبال بهترین گل برای تهیه عسل هستند و بطور کلی طبیعت به دنبال این است که مقاوم‌ترین و برترین موجودات را بسازد.

در ارائه این الگوریتم‌ها از یک زمانی به بعد، الگوریتم‌های مشابه زیادی معرفی شد و بعضی از آن‌ها گاها بسیار به هم شباهت دارند و تفاوت آن‌ها در بعضی مواقع، در حد اسم آنها است. اما هنوز هم این حوزه مورد مطالعه و رو به رشد است و جای پیشرفت بیشتری هم دارد. بطور مثال بهینه‌سازی چند هدفه، یکی از شاخه‌های جذاب بهینه‌سازی است که می تواند مورد مطالعه بیشتری قرار گیرد.

منبع


منابع

1.http://bio1.ir

2.http://www.artaseminar.com

3.https://blog.faradars.org/

بهينه‌سازی و معرفي روش‌های آن قسمت 1
بهينه‌سازی و معرفي روش‌های آن قسمت 2
بهينه‌سازی و معرفي روش‌های آن قسمت 3

دوربین‌ دیجیتال

دوربین دیجیتال یک دستگاه الکترونیکی است که برای گرفتن عکس و ذخیرهٔ آن بجای فیلم عکاسی از حسگرهای حساس به نور معمولاً از نوع CCD یا CMOS استفاده می‌کند و تصویر گرفته شده توسط سنسور طی چند مرحله به حافظهٔ دوربین برای استفاده فرستاده می‌شود.

مخترع دوربین دیجیتال استیون سسون می‌باشد که در زمان اختراع این دستگاه کارمند شرکت ایستمن کداک بود و بدین ترتیب اولین دوربین دیجیتالی تاریخ، توسط این شرکت ثبت گردید. اکنون در سه قطع دوربین (دوربین قطع کوچک، دوربین قطع متوسط و دوربین قطع بزرگ) تکنولوژی دیجیتال تحولاتی ایجاد کرده به عنوان نمونه ساخت پشتی دیجیتال برای دوربین قطع متوسط که با آداپتور قابل نصب بر روی دوربین قطع بزرگ نیز می‌باشد.

در دوربین دیجیتال، تصویربرداری بر روی فیلم صورت نمی‌گیرد بلکه توسط یک حسگر حساس (دستگاه جفت‌کنندهٔ بار (CCD) یا نیم‌رسانای اکسید فلزی مکمل (CMOS)) انجام می‌پذیرد.

دوربین دیجیتال نیکون دی ۲۰۰

عملکرد

از لحاظ عملکرد کلی، دوربین‌های دیجیتال بسیار شبیه به دوربین‌های عکاسی دارای فیلم یا غیر دیجیتال می‌باشند. این دوربینها همانند دوربین‌های معمولی دارای یک منظره یاب، لنز برای کانونی کردن تصویر بر روی یک وسیله حساس به نور، وسیله‌ای برای نگهداری و انتقال چند تصویر گرفته شده در دوربین و یک جعبه در بر گیرنده تمام این تجهیزات می‌باشد. در یک دوربین معمولی فیلم حساس به نور تصویر را ذخیره می‌سازد و بعد از عملیات شیمیایی برای نگهداری تصویر از آن استفاده می‌شود. در حالی که در دوربین دیجیتال این کار با استفاده از ترکیبی از فناوری پیشرفته سنسور (حسگر) تصویر و ذخیره در حافظه انجام می‌گیرد و اجازه می‌دهد که تصاویر در شکل دیجیتال ذخیره شوند و به سرعت بدون نیاز به عملیات خاصی (نظیر عملیات شیمیایی بر روی فیلم) در دسترس باشند.

گرچه اصول کلی این دوربین‌ها شبیه به دوربین‌های فیلمی هستند، نحوه کار داخل این دوربین‌ها کاملاً متفاوت است. در این دوربین‌ها تصویر توسط یک سنسور CCD یا یک CMOS گرفته می‌شود. CCD بصورت ردیفها و ستونهایی از سنسورهای نقطه‌ای نور هستند که هر چه تعداد این نقاط بیشتر و فشرده تر باشد، تصویر دارای دقت بالاتری است) هر سنسور نور را به ولتاژی متناسب با درخشندگی نور تبدیل کرده و آن را به بخش تبدیل سیگنالهای آنالوگ به دیجیتال ADC می‌فرستد که در آنجا نوسانات دریافتی از CCD به کدهای مجزای باینری (عددهای مبنای دو بصورت صفر و یک) تبدیل می‌شود. خروجی دیجیتال از ADC به یک پردازنده سیگنال‌های دیجیتال DSP فرستاده می‌شود که کنتراست و جزئیات تصویر در آن تنظیم می‌شود و قبل از فرستادن تصویر به حافظه برای ذخیره تصویر، اطلاعات را به یک فایل فشرده تبدیل می‌کند. هر چه نور درخشنده‌تر باشد، ولتاژ بالاتری تولید شده و در نتیجه پیکسل‌های رایانه‌ای روشن‌تری ایجاد می‌شود. هر چه تعداد این سنسورها که به‌صورت نقطه هستند بیشتر باشد، وضوح تصویر به دست آمده بیشتر است و جزئیات بیشتری از تصویر گرفته می‌شود.

تمام این پروسه، پروسه‌ای هماهنگ با محیط زیست است. سنسورهای CCD یا CMOS در تمام مدت عمر دوربین در جای خود ثابت بوده و بدون نیاز به تعویض کار می‌کنند. ضمناً به علت عدم وجود قطعات متحرک عمر دوربین بسیار بیشتر می‌شود. سنسور CCD از میلیون‌ها سنسور نوری تشکیل شده است و حساسیت به نور آن از سنسورهای CMOS بهتر است. در عوض در سنسور CMOS مصرف انرژی کمتر بوده و مشکل Over Exposure کمتر بوجود می‌آید. دوربینهای دیجیتال در بطن کار، از دوربین‌های آنالوگ پیروی می‌کنند، با این تفاوت که در این دوربین‌ها، همان‌طور که از اسمشان نیز برداشت می‌شود، کنترل بخش‌های مختلف از جمله فوکوسر و … به صورت دیجیتالی انجام شده یا در صفحه حساس این دوربین‌ها، سی سی دی و سی ماس، جایگزین فیلم‌های قدیمی شده است.

دریافت و ثبت تصویر در دوربین‌های دیجیتال

صفحه‌های حساس در دوربین‌های دیجیتال حرفه‌ای، ccd یا cmos است که مختصراً به بررسی آن می‌پردازیم. حسگرهای نوری از هزاران ردیف المان نیمه‌هادی بسیار کوچک و حساس به نور تشکیل شده‌اند که می‌توانند ذرات یا فوتون‌های نور را به بار الکتریکی تبدیل کنند. حال هر چه شدت نور ورودی بیشتر یا کمتر باشد، الکتریسیته ایجاد شده متعاقباً دست‌خوش تغییر می‌شود. جنس این صفحه‌ها اغلب از عناصری از جمله سیلیسیم و ژرمانیوم است. به طور نمونه شرکت کانن در دوربین‌های SLR خود تاکنون تنها از سنسورهای CMOS استفاده کرده است، در حالی که شرکت نیکون از هر دو نوع سنسور بهره می‌گیرد. بطور کلی تفاوت کیفی زیادی بین این دو نوع سنسور وجود ندارد اما حسگرهای CMOS کم مصرف تر بوده و در شرایط کم نور و با نوردهی‌های طولانی عملکرد بهتری دارند. ضمناً از نظر فنی امکان تولید سنسورهای CCD در ابعاد فول فریم (۲۴×۳۶میلیمتر) موجود نیست.

مزیت‌های دوربین‌های دیجیتال

  • مخابره: شاید مهم‌ترین و اصلی‌ترین دلیل تولید دوربین دیجیتال را بتوان مخابره نامید چرا که تولید آن پس از درخواست موسسات تحقیقات فضایی از تولیدکنندگان تجهیزات عکاسی برای تصویری قابل مخابره جهت تحقیقات فضایی شکل گرفت
  • هزینهٔ کمتر: به لحاظ اینکه در هر دوره عکاسی دیگر احتیاج به خرید، ظهور و چاپ فیلم نیست.
  • مقدار خطای کمتر: به علت پیش نمایش بهتر عکس و نشان دادن عکس در همان زمان می‌توان در صورت مشاهدهٔ خطایی فاحش عکس را مجدادا ثبت کرد در صورتی که در عکاسی آنالوگ پس از مرحلهٔ ظهور می‌توان چنین تشخیصی داد که معمولاً دیر است
  • مقدار ریسک پایین: از بین رفتن یا افت کیفیت شدید فیلم به علت زمان، حرارت، و نور دیدگی، خطای ظهور، چاپ، تاریخ فیلم و… طبیعتاً حذف شده و جای خود را از لحاظ ریسک تنها به خطاهای الکترونیکی بسیار ناچیز می‌دهد.
  • نگهداری بهتر: امکان آرشیو میلیون‌ها عکس در یک فضای بسیار کم با ماندگاری بسیار طولانی‌تر
  • عکس‌برداری متوالی:در دوربین‌های آنالوگ به طور معمول بیشترین تعداد عکس برداری متوالی بیشتر از ۳۶ عدد (به لحاظ تعداد کاست) نمی‌شد به غیر از مواردی خاص که گاهی تا ۳۶۰ عدد اضافه می‌شد (با حجمی مزاحم) ولی با زحمتی چندین برابر برای تعویض فیلم! در صورتی که در دوربین‌های جدید دیجیتال با فشار دادن دکمه شاتر می‌توان بیش از هزاران عکس را بدون توقف در یک کارت حافظه بسیار کوچک جا داد.
  • گستره پویایی بیشتر از فیلم منفی
Mini CD vs Normal CD comparison.jpg MicroDrive1GB.jpg USB flash drive.jpg Floppy disk 90mm.JPG

منبع


قسمتهای مختلف دوربین

چشمی یا منظره یاب 


خیلی از دوربینهای کمپکت دیجیتال و آنالوگ دارای پنجره کوچکی هستند که فرد عکاس می تواند با دیدن از میان آن کادر و اجزا درون آن ، عکس خود را مشخص نماید. این پنجره کوچک که به چشمی یا منظره یاب دوربین معروف است معمولا” در کنار لنز قرار دارد. چیزی که به عنوان تصویر از درون چشمی دوربین مشاهده می کنید ، تصویری تقریبی از نظر کادر یا عکس نهایی است. اختلاف در تصویر چشمی و تصویر نهایی به خطای پارالکس معروف است.
زمانیکه مسئله کادر دقیق سوژه مهم باشد، مثل عکاسی کلوزآپ، صفحه LCD دوربین دیجیتال کمک بزرگی در این مسئله است ، چرا که گیرنده نوری دقیقا” آن چیزی را که می بینید، عکس خواهد گرفت.
شما می توانید منطقه فوکوس را با نشانه گرفتن دوربین به طرف سوژه طوری انجام دهید که مستطیل منطقه فوکوس در نقطه ای از عکس واقع شود که می خواهید فوکوس را روی آن انجام دهید. تکمه شاتر را مقدار کمی به پایین فشار دهید ، دوربین در این حالت فاصله تا سوژه را اندازه می گیرد و لنز را فوکوس می کند. در حالتیکه تکمه شاتر کماکان تا نیمه به پایین فشار داده شده است، کادرعکس خود را هم انتخاب می کنید. 

صفحه LCD 

فقط در دوربینهای عکاسی دیجیتال وجود دارد. این نوع چشمی با همکاری لنز دوربین، کادری که در عکس ظاهر خواهد شد را نشان می دهد. با استفاده از صفحه LCD می توان نه تنها متدی را که در بالا در مورد آن شرح دادیم (یعنی فوکوس کردن) را انجام دهید ، بلکه می توانید ببینید که عکس چگونه خواهد افتاد و مثلا” عکس چقدر روشن و یا تیره ظاهر خواهد شد. روی صفحه LCD معمولا” اطلاعات مربوط به تنظیماتی که در هنگام گرفته شدن عکس استفاده خواهند شد، مثل شاتر و اندازه دیافراگم هم نمایش داده می شوند.
در یک دوربین تک لنزی انعکاسی تصویری که درون چشمی آن مشاهده می شود، از درون لنز و یک سری آینه عبور می کند تا به پنجره چشمی در پشت دوربین می رسد. از این رو چشمی این گونه دوربینها ، کادر عکس را دقیقا” نشان داده و بعضی مواقع هم اطلاعات دیگر ، مثل سرعت شاتر و دیافراگم را در آن می توان مشاهده کرد.

شاتر 

اندازه سرعت بر حسب ثانیه یا کسری از ثانیه بیان می شود. این اندازه معمولا” همراه با درجه باز بودن دیافراگم بیان می شود تا مقدار مشخص نوری که گیرنده نوری باید دریافت کند را مشخص کند. اما از این اندازه برای تاثیر حرکت در عکس هم استفاده می شود.

برای سرعتهای شاتر طولانی تر از ثانیه و جهت احتراز از لرزش دست، باید از سه پایه و یا سایر وسایل ثابت نگهداشتن دوربین استفاده کنید. حتی اگر همه کارها به طور اتوماتیک در دوربین شما انجام می شود، باز هم بهتر است که قبل از گرفتن عکس کنترلی در مورد سرعت شاتر بکنید تا بدانید که عکس شما با چه سرعتی گرفته می شود.


دیافراگم

 دیافراگم اغلب در لنز جای دارد. اندازه باز بودن دیافراگم همراه با سرعت شاتر، مقدار نوری که به گیرنده نوری می رسد را تنظیم می کنند. رقم پایین تر در دیافراگم به معنی بازتر بودن دیافراگم است. برای هر پله یا گامی که دیافراگم کاهش پیدا می کند ( یعنی رقم ها افزایش پیدا می کنند) مقدار نوری که به داخل دوربین راه پیدا می کند، نصف می شود. دیافراگم 8/2 دو برابر دیافراگم 4 نور به داخل دوربین وارد می کند.
اندازه دیافراگم بازتر (رقمهای کوچک تر) همچنین باعث می شود تا عمق میدان عکس کاهش پیدا کند. این بدین معنی است که تصویر فقط در محدوده کمی به صورت واضح دیده خواهد شد و قبل و بعد از این منطقه، تصویر سوژه تار خواهد بود. عمق میدان کمتر را می توان در موارد مشخصی به کار برد ، مثلا” زمانی که عکس شخصی را می خواهیم از پس زمینه متحرک آن جدا کنیم. 


لنز 

در یک دوربین قطع کوچک که از فیلم mm 36×24 استفاده می کند، یک لنز mm 50 لنزی نرمال به حساب می آید. این لنز نه تصویر را بزرگتر و نه کوچکتر می کند. لنزی که باعث می شود موضوع عکس بزرگتر شود به لنز تله مشهور است که فاصله کانونی آن بیشتر از mm 50 است و اگر موضوع عکس کوچکتر از اندازه طبیعی آن شود، آن لنز ، لنزی واید است. لنزهای با فاصله کانونی متغیر به لنز زوم مشهور هستند.
در لنز نرمال، فاصله کانونی برابر اندازه قطر کادر نگاتیو است. دوربین دیجیتال دارای گیرنده نوری یا سنسوری است که اندازه آن خیلی کوچکتر از قطع یک فیلم است. از این رو لنز نرمال در دوربین دیجیتال کوچکتر از لنز نرمال در دوربینهای سنتی قطع کوچک است. فاصله کانونی لنز، معمولا” در دوربینهای دیجیتال معادل فاصله کانونی لنزهای دوربینهای قطع کوچک در نظر گرفته می شود.
زوم دیجیتال : دوربینهای دیجیتال دارای هر دو نوع زوم اپتیک و دیجیتال هستند. زوم دیجیتال به معنی این است که دوربین به طریق الکترونیکی و دیجیتالی یک تصویر را بزرگ می کند. اما در این حالت عکس نمی تواند دارای اطلاعاتی بیشتر از آن چیزی که زوم اپتیک عرضه می کند ، باشد. از این رو کیفیت زوم دیجیتال بسیار پایین تر از زوم معادل اپتیک است. جهت بزرگ کردن یک عکس می توانید از یک نرم افزار تصویری ، بعد از برداشتن عکس استفاده کنید.


فلاش

حتی دوربینهای کوچک و ساده هم، امروزه مجهز به فلاش هستند. میدان روشن کردن فلاشهای ثابت روی دوربینها محدود است ( بین 5/0 تا 3 متر ، جهت اطلاع دقیق به دفترچه دوربین خود مراجعه کنید) اما این فلاش برای فاصله های کم و کوتاه در یک محیط سربسته کفایت می کند.
کاهش خطر قرمزی چشم: فلاش ها معمولا” روی یک دوربین کوچک در کنار لنز قرار گرفته اند. اگر کسی که عکس او گرفته می شود، مستقیما” به دوربین نگاه کند، نور فلاش منعکس شده از برخورد به سرخرگهای شبکیه چشم باعث قرمز شدن چشم فرد در عکس خواهد شد که پدیده چشم قرمز مشهور است. برای مقابله با بروز این پدیده ، فلاش می تواند قبل از گرفتن عکس، نوری از خود بیرون بدهد ، در این هنگام به دلیل نور بیشتر، مردمک چشم خود را جمع می کند و سپس فلاش زده می شود. از این رو یک فاصله و وقفه ای بین هنگامیکه شاتر فشارداده می شود و زمانیکه عکس گرفته می شود، بوجود می آید. در این فاصله ، ممکن است مدل عکاسی شما خسته شود و قیافه دیگری به خود بگیرد که در عکس ظاهر شود.
از آنجایی که اکثر نرم افزار های تصحیح عکس دارای ابزارهایی برای تصحیح قرمزی چشم هستند، پس فلاشهای تاخیری شاید دارای امتیاز منفی بیشتری باشند و مشکلات بیشتری تولید کنند.

منبع


نحوه ی عملکرد دوربین دیجیتال

نقشه انفجاری یک دوربین دیجیتال را در شکل زیر مشاهده می کنید:

اجزای دوربین دیجیتال

نقاط نشان داده شده بر روی شکل فوق عبارتند از:

1- محل رسیدن نور از جسم مورد نظر به دوربین

2- فیلترهای نصب شده بر روی دوربین برای افزایش کیفیت عکس و همچنین محافظت از لنز دوربین

3- سیستم فکوس خودکار برای جلوگیری از گرفتن عکس های تار

4- سنسور دوربین که از میلیون ها پیکسل تشکیل می شود. هر یک از این پیکسل ها میزان روشنی و رنگ نور رسیده شده به آن را اندازه گیری می نماید

5- مدارهای الکترونیکی دوربین که خروجی سنسور را به تصویر دیجیتال تبدیل می نمایند

6- صفحه نمایش دوربین که به ما این امکان را می دهد تا عکس ها را بتوانیم بلافاصله بعد از گرفته شدن مشاهده و بررسی نماییم

7- کارت حافظه دوربین برای ثبت عکس ها بر روی آن

دوربین های دیجیتال اطلاعات هر منظره را به جای این که به صورت تغییر شیمیایی بر روی فیلم های عکاسی ثبت نماید، به صورت اعداد در حافظه دوربین ذخیره می کند و لذا دیگر نیاز به ظاهر کردن و چاپ کردن ندارند و می توان آن ها را بلافاصله پس از گرفته شدن مشاهده نموده و یا حذف نمود.

برخلاف عکس های چاپ شده، کیفیت عکس های دیجیتال با گذشت زمان پایین نمی آید و لذا شما قادر خواهید بود عکس های خود را برای سال های سال نگه دارید.

دوربین های دیجیتال از لنز برای فکوس نمودن تصویر بر روی حسگر خود (به جای فیلم در دوربین های قدیمی) استفاده می کنند.

در دوربین های دیجیتال، حسگر دوربین نورهای رسیده به خود را به بارهای الکتریکی تبدیل می نماید.

اطلاعات این بارها به مدارهای الکترونیکی دوربین وارد می شود و در آن جا پس از اندازه گیری شدن به مقادیر دیجیتال تبدیل می گردد. پردازنده کامپیوتری دوربین سپس این مقادیر دیجیتال را پردازش نموده و آن ها را به صورت عکس بر روی کارت حافظه ذخیره می نماید. عکس های ذخیره شده سپس قابل انتقال به کامپیوترهای دیگر و یا چاپ شدن را دارا خواهند بود. بالا رفتن سرعت عکاسی با دوربین های دیجیتالی، انقلابی در صنعت عکاسی ایجاد نموده است.

نحوه کار حسگر دوربین های دیجیتالی:

در این بخش نحوه عملکرد حسگرهای دوربین های دیجیتالی را کمی بیشتر توضیح می دهیم. به شکل زیر دقت نمایید:

نحوه کار حسگر دوربین های دیجیتالی

در شکل فوق، در مرحله اول شاتر دوربین در هنگام عکاسی باز می شود و اجازه می دهد تا نور به حسگر دوربین برسد.

در مرحله دوم، نور به حسگر می رسد. حسگر دوربین، شبکه ای از پیکسل ها می باشد که هر یک از آن ها مقدار نوری که به او می رسد را اندازه گیری می کند. نور رسیده به هر پیکسل ترکیبی از سه رنگ قرمز، آبی و سبز می باشد.

هر پیکسل دارای فیلترهای سبز، آبی و قرمز می باشند و هر یک از این فیلترها می توانند مانن آن چه در مرحله 3 مشاهده می شود، میزان روشنایی رنگ مربوط به خود را در نوری که به آن ها رسیده اندازه گیری نمایند.

اطلاعات به دست آمده از کلیه پیکسل ها سپس به صورت دیجیتال و در نهایت به صورت عکس درخواهند آمد.اولین دوربین دیجیتال مدل در سال 1976 توسط کداک ساخته شده ولی تا سال 1994 که اپل دوربین دیجیتال QT100 خود را عرضه نمود، به صورت همگانی درنیامد.

منبع


 

دوربین دیجیتال چیست؟ قسمت 1
دوربین دیجیتال چیست؟ قسمت 2
دوربین دیجیتال چیست؟ قسمت 3

آزمون‌تورینگ

آزمون تورینگ روشی برای سنجش میزان هوشمندی ماشین است. آزمون به این صورت انجام می‌گیرد که یک شخص به عنوان قاضی، با یک ماشین و یک انسان به گفتگو می‌نشیند، و سعی در تشخیص ماشین از انسان دارد. در صورتی که ماشین بتواند قاضی را به گونه‌ای بفریبد که در قضاوت خود دچار اشتباه شود، توانسته است آزمون را با موفقیت پشت سر بگذارد.

برای اینکه تمرکز آزمون بر روی هوشمندی ماشین باشد، و نه توانایی آن در تقلید صدای انسان، مکالمه تنها از طریق متن و صفحه کلید و نمایشگر کامپیوتر صورت می‌گیرد.

 

آزمون استاندارد تورینگ

آزمون استاندارد تورینگ، که در آن بازیکن C به عنوان قاضی سعی دارد تشخصی دهد کدام یک از A یا B انسان است.

آزمون تورینگ

تست تورینگ یک تست از توانایی ماشین است برای نمایش دادن رفتاری هوشمندانه شبیه به انسان. آزمون تورینگ در سال ۱۹۵۰ توسط آلن تورینگ،ریاضیدان انگلیسی مطرح گردید. از نظر تورینگ، پرسش «آیا ماشین‌ها می‌توانند تفکر کنند» بی‌معنی‌تر از آن بود که بتوان پاسخ روشنی به آن داد. چرا که نمی‌توان تعریف مشخصی برای تفکر ارائه داد. بنابراین تورینگ پرسش را به این گونه مطرح نمود: آیا می‌توان ماشینی ساخت که آزمون تورینگ را پشت سر بگذارد؟

هم اکنون دو نسخهٔ مختلف از این آزمون وجود دارد: آزمون استاندارد تورینگ، و آزمون تقلید.

آزمون تقلید

در این آزمون، دو شخص با جنسیت‌های متفاوت، از طریق یادداشت با شخص سومی که قاضی است گفتگو می‌کنند. قاضی این دو بازیکن را نمی‌بیند، و با پرسش و پاسخ سعی دارد تشخیص دهد کدام یک مرد و کدام یک زن هستند. نقش بازیکن اول این است که قاضی را به نحوی بفریبد که در تشخیص جنست آن دو اشتباه کند.

تورینگ نقش بازیکن فریبکار را به ماشین سپرد، و در صورتی که این ماشین موفق شود که قاضی را بفریبد، از آزمون موفق بیرون آمده است و می‌توان آن را ماشین هوشمند نامید.

مشکلات آزمون تورینگ

آزمون تورینگ فرض می‌کند که انسان‌ها می‌توانند با مقایسهٔ میان رفتار ماشین و انسان، پی به میزان هوشمند بودن آن ببرند. به دلیل این فرض، و تعدادی پیش فرض‌های دیگر، دانشمندان حوزهٔهوش مصنوعی صحت آزمون تورینگ را مورد تردید قرار دادند.

اولین نکته‌ای که مطرح می‌گردد این است که تعدادی از رفتارهای انسان هوشمندانه نیستند. به عنوان مثال، توانایی توهین به دیگران، یا اشتباه‌های تایپی مکرر هنگام نوشتن با صفحه کلید.

نکتهٔ دومی که به آن اشاره می‌گردد این است که بعضی از رفتارهای هوشمندانه، انسانی نیستند. به عنوان مثال، کامپیوترها بسیار سریع‌تر از انسان محاسبه می‌کنند.

تورینگ پیشنهاد داده است که ماشین می‌تواند به صورت اتفاقی در خروجی خود اشتباهاتی را وارد کند، یا مدت زمان زیادی را صرف محاسبات کرده و در انتها پاسخی اشتباه دهد که قاضی را بفریبد، تا «بازیکن» بهتری باشد.

منبع


آزمون تورینگ؛ غایتی که در گنجه خاک می‌خورد

آزمون تورینگ چیست و چه کاربردی دارد؟

آزمون تورینگ چیست و چه کاربردی دارد؟
بیش از 60 سال پیش تورینگ در یکی از مشهورترین کارهایش آزمونی را به جامعه هوش مصنوعی پیشنهاد کرد تا به معیاری برای ساخت یک ماشین هوشمند تبدیل شود. تورینگ اعتقاد داشت که اگر ماشینی بتواند خود را از انسان غیرقابل تميز کند، بي‌شك می‌توان برچسب هوشمندبودن را بر آن زد و البته وی بسيار خوش‌بین بود که تا پیش از پایان قرن بیستم، شاهد تولد چنین ماشینی خواهیم بود. اگرچه مي‌توان گفت كه در طول سه دهه بعدی متخصصان از دست‌یابی به چنین هدفی تقریباً ناامید شدند، امروز دنیای هوش مصنوعی اعتقاد دارد که شاید دیگر گذراندن آزمون تورینگ هدف مناسبی برای دنبال کردن نباشد. امروزه بسیاری اعتقاد دارند که در اختیار داشتن یک راهبرد کاربردی و پذیرفتن تفاوت‌های رفتاری کامپیوترها نسبت به انسان‌ها، می‌تواند در موارد بسیاری، مفیدتر از تلاش برای ساخت ماشینی انسان‌نما باشد.

آزمون تورینگ چیست؟

در سال 1950 آلن‌تورینگ در مقاله‌ای با عنوان «ساز و کار رایانش و هوشمندی» برای نخستین‌بار آزمون تورینگ را به جهانیان معرفی کرد. به پیشنهاد تورینگ، این آزمون که می‌توان به آسانی آن را اجرا کرد، مشخص می‌کند که آیا یک ماشین به حد کافی هوشمند است یا خیر. در نسخه ابتدایی تعریف شده توسط تورینگ یک انسان در نقش داور از طریق ترمینالی متنی با یک مجموعه از شرکت‌کنندگان که ترکیبی از انسان‌ها و ماشین‌ها هستند، ارتباط برقرار می‌کند. در صورتی که داور انسانی نتواند شرکت‌کننده ماشین را از شرکت‌کنندگان انسانی تشخیص دهد، آن ماشین از نظر تورینگ شایسته صفت هوشمند است.

توجه داشته باشید که لزومی ندارد ماشین به سؤالات مطرح شده توسط داور پاسخ صحیح دهد، بلکه تنها تقلید رفتار انسانی است که هوشمند بودن یا نبودن ماشین را مشخص می‌کند.
تورینگ مقاله مورد نظر را این گونه آغاز می‌کند: «من پیشنهاد می‌کنم که این پرسش را مد نظر قرار دهید: آیا ماشین‌ها می‌توانند فکر کنند؟» سپس از آنجا که تعریف دقیق تفکر بسیار مشکل است، تورینگ پیشنهاد می‌کند که این پرسش به گونه دیگری مطرح شود‌: «آیا قابل تصور است که کامپیوترهای دیجیتال بتوانند در بازی تقلید، عملکرد مناسبی از خود ارائه دهند؟» پرسشی که به گمان تورینگ دلیلی برای منفی بودن پاسخ آن وجود نداشت. در مورد شرایط دقیق آزمون تورینگ بحث‌های زیادی مطرح است که باعث شده‌ نسخه‌های مختلفی از این آزمون به وجود آید.

نکته اول شیوه انجام این آزمایش است که تقریباً همه اعتقاد دارند که نمی‌توان تنها به یک آزمایش اتکا کرد و باید درصد موفقیت در تعداد زیادی آزمایش محاسبه شود. نکته بعدی در میزان اطلاعات پیش از آزمایش داور است. به عنوان مثال، برخی پیشنهاد کرده‌اند که لزومی ندارد داور بداند یکی از افراد درگیر در آزمایش کامپیوتر است و برخی دیگر اعتقاد دارند که مشکلی با دانستن این موضوع وجود ندارد چرا که در واقع آزمون تورینگ برای توانایی فریب دادن داور طراحی نشده بلکه صرفاً سنجش میزان توانایی ماشین در شبیه‌سازی رفتارهای انسانی مدنظر است.

در اینجا باید به نکته مهمی در رابطه با آزمون تورینگ اشاره کرد. تا قبل از ارائه آزمون تورینگ، دانشمندان فعال در زمینه علوم شناختی و هوش مصنوعی مشکلات فراوانی را برای تعریف دقیق هوشمندی و مشخص‌کردن این‌که چه زمانی می‌توان یک فرآیند را تفکر نامید، تجربه می‌کردند. تورینگ که یک ریاضیدان خبره بود با ارائه آزمون تورینگ در واقع سعی داشت تا از دنیای تعاریف نادقیقی که هضم آن برای حوزه‌های دقیقی مانند علوم کامپیوتر مشکل بود، فاصله گرفته و معیاری مشخص برای میزان هوشمندی ماشین‌ها ارائه کند. دانیل کلمنت دنت، دانشمند علوم شناختی و فیلسوف امریکایی در این رابطه می‌گوید: «هنگامي كه تورینگ، آزمون مورد نظر را برای هوشمندی ماشین‌ها ارائه کرد، هدف وی بنا کردن پلتفرمی برای انجام تحقیقات علمی نبود بلکه وی آزمون تورینگ را به عنوان یک ختم‌الکلام برای بحث‌های مورد نظر در آن زمان ارائه کرد.

در واقع، کلام اصلی تورینگ در مقابل کسانی که اصولاً تعریف هوشمندی برای ماشین را غیرقابل قبول می‌دانستند، این بود که: هر ماشینی که بتواند این آزمون را به صورت عادلانه‌ای پشت سر بگذارد، قطعاً یک موجود هوشمند است و دیگر بحثی در این زمینه باقی نمی‌ماند.» دنت سپس به بحث در مورد هوشمندی در قرن 17 توسط دکارت اشاره می‌کند و متذکر می‌شود که وی نیز روشی مشابه برای تعریف هوشمندی ارائه داده بود که بر‌اساس برقرار‌کردن یک مکالمه با موجود مورد نظر بنا شده بود. در نتیجه تورینگ ادعا نمی‌کند ماشینی که نتواند با ما به شکل درستی مکالمه برقرار کند هوشمند نیست، بلکه صرفاً ادعا دارد اگر ماشینی این توانایی را داشته باشد شکی در هوشمندی آن باقی نمی‌ماند.

تلاش‌های نیمه تمام

از اواسط دهه 1960 بسیاری از افراد فعال در زمینه هوش مصنوعی سعی کردند تا به ساخت ماشین‌هایی روی بیاورند که با در اختیار داشتن توانایی درک زبان انسان و استفاده از اطلاعات گنجانده شده در آن‌ها، بتوانند به گذراندن آزمون تورینگ نزدیک شوند. جوزف وایزنباوم در 1966 برنامه‌ای کامپیوتری با نام الیزا را معرفی کرد که یکی از نخستین نمونه‌های پردازش زبان طبیعی بود. این برنامه قادر بود تا یک مکالمه را با در اختیار داشتن کمترین اطلاعات ممکن نسبت به موضوع مورد بحث پیش ببرد. یکی از مشهورترین موارد پیاده‌سازی شده در الیزا، شبیه‌سازی با عنوان «دکتر» بود که سعی داشت تا نقش یک روانکاو را برای ماشین شبیه‌سازی کند.

پاسخ‌هاي الیزا عموماً بسیار کلی بودند و برای تولید آن‌ها از تکنیک‌های موجود تطابق الگو در آن زمان استفاده می‌شد. وایزنباوم در 1976 در مقاله‌ای با عنوان «قدرت کامپیوتر و استدلال انسان» اشاره کرد که بسیاری از افرادی که با اسکریپت «دکتر» کار کرده‌اند به زودی ارتباط عاطفی قوی‌ با آن برقرار کردند، حتی اصرار داشتند که در هنگام کارکردن با برنامه در اتاق تنها گذاشته شوند. خود وایزنباوم اشاره کرده است که در طول سال‌های استفاده از الیزا مواردی بوده که کاربران در تشخیص انسان نبودن الیزا با مشکل مواجه شده‌اند یا حتی در آن ناکام مانده‌اند. به طور کلی این دیدگاه که الیزا توانسته است آزمون تورینگ را پشت سر بگذارد در جامعه علمی هوش مصنوعی چندان طرفدار ندارد اما به طور حتم این قطعه کد نقش زیادی در پیشرفت شبیه ساختن برنامه‌های کامپیوتری به رفتارهای انسان ایفا کرد.

کنت کولبی در 1972 نمونه‌ای جدیدتر از الیزا را با عنوان «پری» (PARRY) معرفی کرد که در واقع پیاده‌سازی رفتار یک بیمار شیزوفرنیک پارانویا بود. کمی بعد از معرفی پری، این ماشین در یک آزمایش واقعی قرار داده شد تا قدرت آن در گذراندن آزمون تورینگ مشخص شود. در این آزمایش گروهی از روانکاوان باتجربه ترکیبی از بیماران واقعی و نسخه‌های برنامه پری را از طریق یک تله پرینتر مورد بررسی قرار دادند. سپس از یک گروه روانکاو دیگر خواسته شد تا با مشاهده ریز مکالمات مشخص کنند که کدام مورد، مکالمه با ماشین و کدام یک مکالمه با انسان بوده است. در نهایت، روانکاوان گروه دوم تنها در 48 درصد موارد توانستند درست حدس بزنند؛ نتيجه‌اي که تقریباً مشابه سکه انداختن برای تعیین ماشین یا انسان بودن طرف مکالمه است!  توسعه برنامه‌هایی مانند الیزا و پری که در دسته کلی چت بات‌ها قرار می‌گیرند هنوز هم در جای جای دنیا ادامه دارد. چنین برنامه‌هایی که صرفاً قصد شبیه‌سازی یک مکالمه هوشمند را دارند عموماً از دانش خاصی برخوردار نیستند بلکه سعی می‌کنند تا با تکنیک‌های زبانی و البته الگوریتم‌های پیچیده، مکالمه را به شیوه‌ای قابل قبول پیش ببرند؛ مکالمه‌ای که لزوماً خروجی مفیدی برای کاربر ندارد.

چنین برنامه‌هایی هر چند ممکن است در موارد خاصی حتی تا مرز گذراندن آزمون تورینگ نیز پیش روند، اما به دلیل نبود یک دانش ساختاری در درون سیستم، قلمرو بسیار محدودی دارند. تمرکز تحقیقات و نیروی انسانی متخصص حوزه هوش مصنوعی روی ساخت ماشینی که صرفاً بتواند به طریقی آزمون تورینگ را با موفقیت پشت سر گذارد، برای سال‌های متمادی منجر به تحقیقاتی این چنینی شد که هر چند کسی در ارزش بسیار زیاد آن شکی ندارد، اما نمی‌تواند به عنوان بخشی از راه‌حل یک مسئله دنیای واقعی به کار رود.

آیا این هوشمندی است؟

در بیش از شصت سالی که آزمون تورینگ در حوزه هوش مصنوعی حضور داشته است، انتقادات مختلفی به آن وارد شده که بخش بزرگی از آن‌ها بر این موضوع استوار بوده‌اند که آیا این آزمون معیار خوبی برای تشخیص هوشمندی یک سیستم است؟
به عنوان مثال، جان سیرل فیلسوف امریکایی در مقاله‌ای با عنوان «ذهن‌ها، مغزها و برنامه‌ها» در سال1980 آزمایشی ذهنی با عنوان «اتاق چینی» را طراحی کرد که به تعریف هوشمندی مورد نظر حوزه هوش مصنوعی حمله می‌کند.

فرض کنید که شما یک برنامه در اختیار دارید که می‌تواند طوری رفتار کند که زبان چینی را می‌فهمد. این برنامه یک ورودی از کاراکترهای چینی را گرفته و بر‌اساس آن‌ها خروجی متشکل از کاراکترهای چینی تولید می‌کند. همین طور فرض کنید که این برنامه آزمون تورینگ را با موفقیت پشت سر بگذارد. حال در اینجا یک پرسش بزرگ به وجود می‌آید : «آیا این ماشین به‌راستي چینی می‌فهمد یا تنها می‌تواند فهم زبان چینی را شبیه‌سازی کند؟» سیرل بیان می‌کند که اگر وی در اتاقی، مقابل این ماشین قرار بگیرد، می‌تواند با وارد‌کردن هر ورودی چینی در کامپیوتر و یادداشت‌کردن خروجی برنامه روی یک تکه کاغذ آزمون تورینگ را با موفقیت پشت سر بگذارد. وی سپس اشاره می‌کند که فرقی میان نقش ماشین در حالت اول و نقش وی در حالت دوم وجود ندارد و از آنجایی که وی یک کلمه چینی نمی‌فهمد، در نتیجه ماشین نیز درکی از زبان چینی ندارد. در نهایت وی نتیجه می‌گیرد که بدون درک شیوه عملکرد کامپیوتر و تنها از روی مشاهده رفتار آن نمی‌توان نتیجه گرفت که کاری که ماشین انجام می‌دهد فکر کردن است.

دیدگاه جان سیرل از طرف دانشمندان علوم شناختی مورد انتقادات فراوانی قرار گرفته است. از جمله این انتقادات می‌توان به این نکته اشاره کرد که ممکن است فرد به صورت خاص زبان چینی را نفهمد اما سیستم به صورت یک کل توانایی فهم زبان چینی را دارد و نمی‌توان توانایی فهم انسان به عنوان بخشی از این سیستم را از کل جدا کرد. هر چند آزمایش «اتاق چینی» مورد انتقادات فراوانی قرار گرفته و نمی‌تواند به عنوان یک خطر جدی برای آزمون تورینگ تلقی شود، اما با مشاهده چنین دیدگاه‌هایی کاملاً مشخص می‌شود که چرا پیاده‌سازی ایده آزمون تورینگ در دنیای واقعی تا این اندازه مشکل است.

دسته دیگری از انتقادات به این موضوع اشاره دارند که میزان تقلید از رفتارهای انسانی لزوماً معیار خوبی برای هوشمندی نیست. چرا‌که نه تمام رفتارهای انسانی هوشمندانه است و نه تمام رفتارهای هوشمندانه انسانی است. این که تا چه حد این جمله را قبول دارید، می‌تواند موضوع خوبی برای یک بحث فلسفی طولانی باشد و البته بعید است به نتیجه مشخصی برسد. به عنوان مثال، ابرکامپیوتر دیپ‌بلو ساخت آی‌بی‌ام را در نظر بگیرید که در دهه 1990 موفق شد گری کاسپاروف استاد مسلم شطرنج جهان را شکست دهد. دیپ بلو طبیعتاً نمی‌تواند در مکالمه با انسان همراهی کند اما به خوبی وی (حتی بهتر از او) شطرنج بازی می‌کند. آیا این ماشین کمتر از الیزا هوشمند است؟ جواب از نظر بسیاری خیر است. اما باز هم باید توجه داشت که تورینگ به هیچ عنوان ادعا نمی‌کند عدم تقلید از انسان به معنای عدم هوشمندی است.

این که آیا تقلید از رفتار انسان واقعاً نشان‌دهنده هوشمندی است یا خیر، هنوز مورد بحث و بررسی است. به‌عبارتي، هنوز هم تعریف دقیقی برای هوشمندی در اختیار نداریم و همین موضوع باعث می‌شود تا نتوان در این مورد استدلال چندان قابل قبولی ارائه داد. به هر روی، ما امروز می‌دانیم که رفتار هوشمندانه و رفتار انسانی ممکن است لزوماً به یک معنی نباشند. همچنین آگاه هستیم که برای گذراندن آزمون تورینگ، آشنایی ماشین به جزئیات و قوانین زبان انسانی به همان اندازه اهمیت دارد که دانش و استدلال گنجانده شده در آن ارزشمند است. خبر نه‌چندان امیدوار کننده، این است که با وجود پیشرفت‌های فراوان حوزه یادگیری زبان و زبان‌شناسی، فرآیند دقیقی که باعث می‌شود انسان‌ها در یادگیری یک زبان به چنین درجه‌ای از تبحر دست‌یابند، به طور دقیق برای دانشمندان مشخص نیست. حتی از تمام این موارد که بگذریم، مسئله‌‌ای بسیار مهم‌تر مطرح می‌شود و آن این است که آیا اصولاً گذراندن یا نگذراندن آزمون تورینگ تا این حد مسئله مهمی است؟ دنیای نوین هوش مصنوعی اعتقاد دارد که پاسخ این پرسش منفی است. در ادامه مقاله مي‌كوشيم تا تصویری از وضعیت آزمون تورینگ در دنیای امروز ترسیم کنيم.

وقتی انسان آن‌قدرها هم جذاب نیست

استیون لوی در سال 2010 در مقاله‌ای با عنوان «انقلاب هوش مصنوعی آغاز شده است» نگاه متفاوتی را نسبت به دنیای هوش مصنوعی در روزگار نوین ارائه می‌دهد. نگاهی که البته لوی با بسیاری از صاحب‌نظران دیگر به اشتراک می‌گذارد. وی در ابتدا به سیستم اداره انبار Diapers.com که به صورت کامل توسط روبات‌ها انجام می‌شود اشاره مختصری کرده و متذکر می‌شود که اداره این سیستم با سازماندهی فعلی برای انسان‌ها تقریباً غیرممکن است. سپس ادامه می‌دهد «روبات‌های به کار گرفته شده در این انبار خیلی باهوش نیستند. آن‌ها توانایی حتی نزدیک به هوش انسانی را نیز در اختیار نداشته و به‌طور قطعی نمی‌توانند آزمون تورینگ را با موفقیت پشت سر بگذارند. اما آن‌ها نمایانگر نگاه جدیدی در حوزه هوش مصنوعی هستند. هوش مصنوعی امروز تلاش نمی‌کند تا مغز را بازسازی کند. بلکه در مقابل این حوزه، از یادگیری ماشین، دیتاست‌های عظیم، حسگرهاي پیشرفته و الگوریتم‌های پیچیده استفاده کرده تا کارهای گسسته را به نحو احسن انجام دهد. مثال‌های این امر در همه حوزه‌ها مشهود است. ماشین‌های گوگل پرس‌وجو‌های پیچیده انسانی را تفسیر می‌کنند. شرکت‌های کارت اعتباری از هوش مصنوعی برای تشخیص کلاه‌برداری سود می‌برند. نت فلیکس با استفاده از آن،‌ سعی می‌کند ذائقه مشترکانش را حدس زده و فیلم‌های مورد علاقه‌شان را به آنان پیشنهاد کند و سرانجام، سیستم مالی از هوش مصنوعی برای مدیریت میلیاردها داد و ستد استفاده می‌کند (که تنها گه‌گاهی از هم می‌پاشد!).»

لوی سپس با اشاره به زمستان هوش مصنوعی که باعث متوقف شدن مقطعی پیشرفت‌ها در حوزه هوش مصنوعی و «مرگ هدف اولیه» شد، می‌گوید: «اما این باعث شد تا یک هدف جدید متولد شود؛ ماشین‌ها ساخته شده‌اند تا کارهایی را انجام دهند که انسان‌ها نمی‌توانند هیچ گاه از عهده آن‌ها برآیند.» همان‌طور که لوی به‌درستی اشاره می‌کند ساخت سیستم‌های منطقی که بتوانند شیوه تفکر انسان را به‌طور کامل شبیه‌سازی کرده و با استفاده از اصول منطقی ساده یک ماشین هوشمند را تشکیل‌دهند، کاری است که محققان در خلال دهه‌های 1960 و 1970 انجام آن را خیلی سخت‌تر از آن چیزی که تصور می‌شد، یافتند. در مقابل، تحقیقات جدیدتر حوزه هوش مصنوعی بخش دیگری از حقیقت را نمایان ساخت. منطق کارکرد کامپیوترها ممکن است با آنچه انسان‌ها از تفکر منطقی انتظار دارند کاملاً متفاوت باشد. یکی از حوزه‌هایی که مانور اصلی خود را بر این حقیقت استوار کرده، الگوریتم‌های احتمالاتی هستند.

با پیشرفت قدرت محاسباتی کامپیوترها، دانشمندان بیش از هر زمان دیگری، نسبت به الگوریتم‌هایی که المان‌های تصادفی را شامل می‌شوند، علاقه نشان می‌دهند. ترکیب این الگوریتم‌ها با قدرت محاسباتی امروز عموماً پاسخ‌هایی «به حد کافی مناسب» را برای مسئله‌های پیچیده‌ای که حل آن‌ها دور از دسترس بود، ارائه می‌دهد. به عنوان مثال، الگوریتم‌های ژنتیک را در نظر بگیرید. در چارچوب این الگوریتم‌ها ماشین با یک ساختار منطقی گام‌به‌گام و استدلال‌های پیچیده مواجه نمی‌شود بلکه صرفاً یک سیستم بازخورد از تعدادی جواب‌ها را در اختیار گرفته و سعی می‌کند تا رفتار درست را بر‌اساس ورودی انسانی پیدا کند. چنین روش‌های استدلالی از عهده انسان‌ها خارج است. ما برای خروج از یک وضعیت نامطلوب نمی‌توانیم میلیون‌ها راه را آزمون کنیم بلکه عموماً سعی می‌کنیم تا با استفاده رشته‌ای از تفکرات پیچیده، راه خروج را به صورت مکاشفه‌ای (Heuristic) پیدا کنیم. در مقابل ماشین‌ها می‌توانند منطق دیگری را دنبال کنند و آن انجام آزمون و خطا در مقیاس میلیونی است. شاید تصور بسیاری بر این باشد که راهبرد اول نسبت به راهبرد دوم از ارزش بیشتری برخوردار است. از جهاتي نمي‌توان به این دیدگاه اعتراضی داشت، اما به‌نظر مي‌رسد تا زمانی که یک راهبرد می‌تواند پاسخ مناسبی را در مدت زمانی کوتاه در اختیار ما قرار دهد، انتقاد از آن چندان محلی از اعراب ندارد.

راسل و نوریگ نویسندگان مشهورترین کتاب درسی در زمینه هوش مصنوعی نیز دیدگاهی به نسبت نزدیک به دیدگاه لوی را در این زمینه ارائه می‌کنند. آن‌ها اعتقاد دارند که شبیه‌سازی واقعي هوش  انسان مسئله‌ای بسیار مشکل است که نیازی نیست به عنوان هدف اولیه تحقیقات هوش مصنوعی در نظر گرفته شود. هر‌چند در بسیاری از فناوری‌های امروز تطبیق فناوری با رفتارها و عادت‌های انسانی به عنوان یکی از برگ‌های برنده فناوری مورد نظر به شمار می‌رود (نگاهی به آی‌فون و آی‌پد بیاندازید) اما لزوماً راه ساخت یک ماشین هوشمند، از شبیه‌سازی رفتار انسانی نمی‌گذرد (همان‌طور که بارها در طول مقاله ذکر شد، تورینگ خود نیز چنین عقیده‌ای نداشت). راسل و نوریگ برای این موضوع آنالوژی جالبی ارائه می‌دهند‌: «هواپیماها با توجه به میزان کیفیت پروازشان آزمایش می‌شوند و نه شبیه بودنشان به پرندگان. متون هوافضا هدف حوزه‌شان را “ساخت ماشین‌هایی که آن قدر شبیه کبوترها پرواز کنند که بتوانند کبوترهای دیگر را فریب دهند” بیان نمی‌کنند.»

آزمون تورینگ چیست؟ قسمت 1
آزمون تورینگ چیست؟ قسمت 2

مراحل ایجاد یک سیستم خبره

ایجاد یک سیستم خبره تا حد زیادی بستگی به تأمین منابع دارد. ولی مانند هر پروژه دیگری، ایجاد سیستم بستگی به این دارد که فرآیند ایجاد سیستم چگونه سازماندهی و مدیریت شود.

مدیریت پروژه

انتظار می رود مدیریت پروژه، موارد ذیل را تأمین نماید. در حقیقت مدیریت پروژه، خود یکی از موضوعات مورد نظر طراحات سیستمها خبره بوده است.

مدیریت فعالیتها
برنامه ریزی – تعریف فعالیتها– تعیین اولویت فعالیتها

– احتیاجات منابع

– اهداف شاخص میانی

– مدت فعالیتها

– مسئولیتها

– تعیین زمانهای شروع و پایان

– رفع مشکل زمان بندی فعالیتهایی که اولویت یکسان دارند.

– نظارت بر عملکرد پروژه

– برنامه های تحلیل، زمان بندیها و فعالیتهای ثبت شده

مدیریت پیکره بندی محصول
مدیریت محصول – مدیریت نسخه های مختلف محصول– مدیریت تغییرات پیشنهادی و انجام ارزشیابی

– تخصیص پرسنل برای انجام تغییرات

– نصب نسخه های جدید محصول

مدیریت منابع

تخمین منابع مورد نیاز

منابع در دسترس

تعیین مسئولیتها برای استفاده بهینه از منابع

تهیه و تدارک منابع بحرانی برای به حداقل رساندن گلوگاه ها

فعالیتهای لازم برای ایجاد یک سیستم خبره، آن دسته از وظایفند که برای ساخت سیستم لازمند. شکل ۲-۶ یک نگرش سطح بالا از فعالیتهای لازم برای ساخت سیستم را نشان می دهد که شامل مراحلی است که سیستم باید از آنها عبور کند.

مسئله تحویل

سیستم چگونه تحویل داده خواهد شد؟

با این که استفاده از کامپیوترهای (اندازه متوسط) مدرن بسیار آسان بوده و زمان تحویل را نیز کاهش می دهد، ولی اغلب تحویل سیستم بر روی چنین کامپیوترهیی بسیار هزینه بر است. از این گذشته، هزینه نگهداری سالانه نیز این هزینه را به طور قابل توجهی افزایش می دهد.

بسته به تعداد سیستمهای خبره ای که در صف تحویل قرار دارند، مسئله تحویل سیستمهای ساخته شده ممکن است به یک مشکل جدی بدل شود. به همین دلیل مسئله تحویل باید در اولین مرحله ایجاد سیستم مورد نظر قرار گیرد.

حالت ایده آل آن است که سیستم خبره تحویل شده را بتوان روی سخت افزار استاندارد اجرا نمود. ولی بعضی ابزارهای سیستم خبره به یک ریزپردازنده LISP خاص نیاز دارند که هزینه را تا حد زیادی افزایش می دهد.

در بسیاری از موارد، سیستم خبره باید با سایر برنامه های موجود، یکپارچه شود. در این موارد باید به ارتباطات و هماهنگ سازی ورودی و خروجیهای سیستم خبره با سایر برنامه ها توجه شود. همچنین ممکن است مایل باشیم که در زبان برنامه نویسی رایج، سیستم خبره به عنوان یک رویه، فراخوانی شود و سیستم باید از این برنامه پشتیبانی کند.

نگهداری و تکامل

چگونه سیستم تکامل یافته و از آن نگهداری می شود؟

فعالیتهای نگهداری و تکامل یک سیستم خبره بیش از برنامه های رایج کامپیوتری، ادامه خواهد یافت. زیرا سیستمهای خبره مبتنی بر الگوریتم نیستند، عملکرد آنها به دانش وابسته است. هر دانش جدیدی که کسب شود، دانش قدیمی اصلاح می شود و عملکرد سیستم بهبود می یابد.

در یک محصول با کیفیت تجاری باید یک روش سیستماتیک و موثر برای جمع آوری شکایات از کاربران وجود داشته باشد. هر چند در سیستمهای خبره مربوط به تحقیقات، جمع آوری و رسیدگی به گزارشهای مربوط به ایرادات و نقائص از اولویت بالایی برخوردار نیست، ولی این موضوع در سیستمهایی با کیفیت تجاری دارای اولویت زیادی است. فقط در صورتی می توان بخوبی از سیستم نگهداری کرد که گزارشهای مربوط به ایرادات جمع آوری شده باشد.

ارتقاء و غنی سازی یک سیستم خبره پس از تحویل در سیستمهای خبره تجاری از اهمیت بیشتری برخوردار است. سازندگان یک سیستم تجاری علاقه مند به کسب موفقیتهای مالی هستند. این به معنای شنیدن خواسته های کاربران و بکارگیری آنها جهت بهبود سیستم است. در موقعیتهای واقعی یک سیستم خبره تجاری ممکن است هرگز به نقطه پایان نرسد، بلکه همواره بهتر شود.

خطاها در مراحل ایجاد

همان طور که شکل ۳-۶ نشان می دهد، خطاهای عمده ای که احتمالا در ایجاد سیستم خبره رخ می دهد. با تشخیص مرحله ای که احتمال بروز آن خطا بیشتر است دسته بندی می شود. این خطاها شامل موارد زیر هستند.

خطاهای موجود در دانش فرد خبره، منبع دانش سیستم خبره است. اگر در دانش فرد خبره خطایی وجود داشته باشد، نتایج آن ممکن است در کل فرآیند ایجاد سیستم منتشر شود. یکی از مزایای جنبی ساخت یک سیستم خبره این است که وقتی دانش فرد خبره، به صراحت بیان شده و شفاف می شود خطاهای احتمالی آن آشکار خواهد شد.

در پروژه هایی که ماموریت حساسی به عهده دارند و زندگی یا اموال افراد در خطر است، ممکن است لازم باشد از یک رویه رسمی برای تصدیق دانش فرد خبره استفاده شود. یکی از روشهای موفقیت آمیزی که ناسا برای پروازهای فضایی بکار برد استفاده از کمیته فنی پرواز بود که به طور منظم، راه حل مسائل و روشهای تحلیلی بکار رفته در ایجاد راه حلها را مورد بازنگری قرار می داد (Culbert 87). کمیته های فنی از کاربران سیستم، افراد خبره در زمینه های مستقل از هم، سازندگان سیستم و مدیران تشکیل می شود تا همه زمینه های ایجاد سیستم به طور موثر پوشش داده شود.

مزیت استفاده از کمیته فنی این است که دانش فرد خبره در بدو ایجاد سیستم مورد بررسی دقیق قرار می گیرد و این زمانی است که تصحیح خطاهای موجود دار دانش بسیار آسان تر است. هر چه خطاهای موجود در دانش دیرتر ظاهر شود هزینه بیشتری برای تصحیح آن لازم است. اگر در ابتدا دانش فرد خبره بررسی نشود، آزمون نهایی جهت تصدیق سیستم خبره صورت خواهد گرفت. اعتبارسنجی نهایی سیستم خبره مشخص می کند که آیا این سیستم جوابگوی نیازها هست یا خیر و به خصوص اینکه آیا راه حلها کامل و صحیح هستند یا نه.

عیب استفاده از کمیته فنی، هزینه ای است که در ابتدا تحمیل می شود. ولی این هزینه با افزایش کارایی فرآیند ایجاد سیستم جبران می شود.

خطای معنایی. خطای معنایی زمانی رخ می دهد که مفهوم دانش به درستی منتقل نمی شود. به عنوان یک مثال بسیار ساده فرض کنید یک فرد خبره می گوید «شما می توانید آتش را با آب خاموش کنید.» و مهندس دانش این گونه تعبیر می کند که «آتش سوزیها را می توان با آب مهار کرد.» خطای معنایی زمانی روی می دهد که یا مهندس دانش تعبیر نادرستی از پاسخ فرد خبره داشته باشد و یا فرد خبره، سوال مهندس دانش را به درستی تعبیر نکند و یا هر دوی این موارد.

خطای شکلی. خطاهای شکلی و یا دستور زبانی ساد هستند و زمانی روی می دهد که قاعده یا واقعیت به شکل نادرستی وارد شود. ابزارهای سیستم خبره باید این خطاها را شناسایی کرده و پیغامی مناسب به کاربر ارائه دهند. سایر خطاهایی که در مرحله ساخت پایگاه دانش روی می دهند نتیجه خطاهای موجود در منبع دانش هستند که در مراحل قبلی آشکار نشده اند.

خطاهای موتور استنتاج. مانند هر قسمتی از یک نرم افزار، موتور استنتاج نیز ممکن است دچار خطا شود. اولین باری که یک ابزار سیستم خبره جهت استفاده عمومی آماده می شود باید کلیه خطاهای عمومی آن برطرف شده باشد. ولی گاه خطاهایی وجود دارند که فقط در شرایطی بسیار نادر بروز می کنند که به عنوان مثال قرار گرفتن ۱۵۹ قاعده در دستور کار از آن جمله است. ممکن است بعضی خطاها بسیار ظریف باشند و فقط در تطبیق خاصی از قواعد با واقعیات بروز کنند. به طور کلی خطاهای موتور استنتاج ممکن است در تطبیق قواعد با واقعیات، رفع تناقض و اجرای فعالیتها روی دهند. اگر این خطاها به طور پیوسته رخ ندهند تشخیص آنها بسیار دشوار است. وقتی از ابزار سیستم خبره برای مأموریتهای حساس استفاده می کنید باید مشخص کنید که ابزار چگونه معتبر می شود.

ساده ترین روش برای خطاهای ابزار، روش قدیمی سوال از کاربران و فروشندگان ابزار است. باید فروشندگان ابزار فهرستی از مشتریان، خطاهای برنامه و چگونگی رفع آنها و نیز طول زمان استفاده از ابزار را تهیه نمایند. گروهی از کاربران می تواند منبع اطلاعاتی بسیار خوبی باشد.

خطاهای زنجیره استنتاج. این خطاها ممکن است در اثر عواملی همچون دانش آمیخته با خطا، خطاهای معنایی، خطاهای موتور استنتاج، تخصیص اولویت نادرست به قواعد و ارتباطات برنامه ریزی نشده بین قواعد بروز کنند. خطاهای پیچیده تر در زنجیره های استنتاج مربوط به عم قطعیت قواعد و شواهد، انتشار عدم قطعیت در زنجیره استنتاج و عدم یکنواختی هستند.

تنها انتخاب روشی برای مواجهه با عدم قطعیت نمی تواند همه مسائل مربوط به عدم قطعیت را خود به خود حل کند. به عنوان مثال، قبل از اینکه شما روش استنتاج بیزی ساده را انتخاب کنید باید بررسی نمایید که آیا تضمینی برای فرض استقلال شرطی وجود دارد یا خیر.

خطاهای مربوط به محدوده های جهل. یکی از مشکلات مربوط به همه مراحل ایجاد سیستم، تعیین محدوده های جهل سیستم است. افراد خبره، محدوده دانش خود را می دانند و خوشبختانه همان طور که به مرزهای جهل خود نزدیک می شوند به تدریج اطمینان آنها نسبت به استنتاج کاهش می یابد. افراد خبره باید به حدی صادق باشند که وقتی به مرزهای جهل خود نزدیک می شوند اجازه دهند که نتایج با عدم قطعیت بیشتری همراه باشد. ولی در یک سیستم خبره حتی اگر مدارک و زنجیره استنتاج بسیار ضعیف شوند باز هم با همان اطمینان به پاسخگویی ادامه می دهد مگر اینکه یک سیستم خبره طوری برنامه ریزی شده باشد که بتواند در چنین شرایطی با عدم قطعیت نتایج را بیان کند.

مهندسی نرم افزار و سیستمهای خبره

در قسمت قبل درباره ملاحظات کلی در بکارگیری سیستم خبره بحث کردیم. حال اجازه بدهید با یک دیدگاه فنی تر یعنی با دیدگاه مهندس دانش که سیستم را ساخته است مراحل ساخت سیستم خبر را مرور نماییم.

وقتی سیستم خبره از مرحله تحقیق بیرون آمد، لازم است سطح کیفیت نرم افزار به سطح استاندارد نرم افزارهای معمولی ارتقاء یابد. متدولوژی پذیرفته شده برای ایجاد نرم افزارهای کیفی در حد استانداردهای تجاری، صنعتی و دولتی، مهندسی نرم افزار است.

پیروی از استانداردهای مناسب برای ایجاد یک محصول از اهمیت زیادی برخوردار است در غیر این صورت احتمالا محصول کیفیت خوبی نخواهد داشت. در حال حاضر سیستمهای خبره را باید محصولی مانند سایر محصولات نرم افزاری نظیر پردازشگر لغات، برنامه پرداخت حقوق، بازیهای کامپیوتری و غیره در نظر گرفت.

با این وجود تفاوت مشهودی بین مأوریت سیستمهای خبره و سایر محصولات مصرفی نظیر پردازشگر لغات و بازیهای ویدئویی وجود دارد. معمولا تکنولوژی سیستمهای خبره وظیفه دارد دانش و خبرگی را برای موقعیتهای سطح بالا و احتمالا خطرناک که زندگی و اموال افراد در خطر است تهیه کند. این مأموریت حساسی است که در قسمت قبلی نیز به آن اشاره شد.

این مأمویت های حساس و بحرانی با مأموریت ساده پردازشگر لغات و برنامه های ویدئویی یعنی افزایش کارایی و تفریح کردن تفاوت بسیار زیادی دارد. زندگی هیچ انسانی نمی تواند به سیستمهای خبره، سیستمهایی با توان عملکرد بالا هستند که باید کیفیت بسیار خوبی داشته باشند در غیر این صورت با اشکالات زیادی رو به رو خواهند شد. همان طور که در شکل ۴-۶ نشان می دهد مهندسی نرم افزار روشهایی برای ساخت نرم افزار کیفی ارائه می دهد.

تشریح کلمه کیفیت به صورت کلی دشوار است زیرا این کلمه برای افراد معانی گوناگونی دارد. یکی از تعاریف کیفیت این است که آن را به صورت مشخصه های لازم یا مطلوبیک شی تعریف کنیم که در مقیاسهای خاصی تعیین شده است. کلمه شی در اینجا به معنای هر نوع سخت افزار یا نرم افزار یا محصولات نرم افزاری است. مشخصه ها و مقادیر آنها شاخص نامیده می شوند زیرا از آنها برای اندازه گیری اشیاء استفاده می شود. به عنوان مثال، قابلیت اطمینان اندازه گیری شده یک دیسک درایو، شاخصی برای کیفیت آن است. یکی از معیارهای این مشخصه، متوسط زمان بین خرابی (MTBF) درایوهاست. MTBF یک درایو قابل اطمینان، حدود ۱۰۰۰ ساعت است، در حالی که برای یک درایو غیر قابل اطمینان ممکن است حدود ۱۰۰ ساعت باشد.

جدول ۱-۶ فهرستی از چند شاخص ارائه داده است که ممکن است در ارزیابی کیفیت یک سیستم خبره کاربرد داشته باشند. این شاخصها فقط جنبه راهنما دارند زیرا یک سیستم خبره مخصوص ممکن است برخی از این شاخصها یا شاخصهای دیگری داشته باشد. در هر حال بهتر است که فهرستی از شاخصهای لازم تهیه شود تا از آن بتوان در تشریح کیفیت استفاده کرد.

فهرست شاخصها به شما کمک می کند تا به راحتی شاخصها را اولویت بندی کنید زیرا ممکن است بعضی از آنها با هم تناقض داشته باشند. به عنوان مثال افزایش تعداد آزمونهای یک سیستم خبره جهت اطمینان از درستی عملکرد آن، هزینه را افزایش خواهد داد. معمولا تصمیم گیری در مورد زمان ختم آزمونها کاری دشوار است که نیازمند بررسی عواملی همچون زمان بندی، هزینه و احتیاجات می باشد. در حالت ایده آل همه نیازهای فوق باید ارضاء شوند. در عمل ممکن است به بعضی از این نیازها اهمیت بیشتری داده و لذا موضوع ارضا همه عوامل به طور جدی دنبال نشود.

چرخه حیات سیستم خبره

یکی از روشهای کلیدی در مهندسی نرم افزار، چرخه حیات است. چرخه حیات نرم افزار مدت زمانی است که از لحظه ای که نرم افزار مفهوم خود را پیدا می کند شروع شده و پس از اینکه سیستم از رده خارج شد پایان می یابد. چرخه حیات علاوه بر اینکه به ایجاد و نگهداری سیستم به طور جداگانه می پردازد، نوعی پیوستگی و ارتباط بین کلیه مراحل ایجاد می کند. هر چه در چرخه حیات، برنامه ریزی برای نگهداری و ارتقاء سیستم زودتر انجام شود هزینه مراحل بعدی کاهش خواهد یافت.

هزینه های نگهداری

برای نرم افزارهای معمولی، معمولا ۶۰ تا ۸۰ درصد کل هزینه نرم افزار مربوط به هزینه نگهداری است که حدود ۲ تا ۴ برابر هزینه ایجاد سیستم است. اگر چه هنوز به دلیل جدید بودن سیستمهای خبره، اطلاعات کمی درباره نگهداری آنها در دست است ولی احتمالا برای سیستمهای خبره ارقام فوق صادق نیستند. اگر برنامه های معمولی با الگوریتم های شناخته شده نیاز به چنین هزینه زیادی جهت نگهداری دارند احتمالا سیستمهای خبره نیاز به هزینه بیشتری خواهند داشت زیرا این سیستمها مبتنی بر دانش تجربی و هیوریستیکها هستند. سیستمهای خبره ای که حجم بالایی از استنتاجها را در شرایط عدم اطمینان انجام می دهند هزینه نگهداری و ارتقاء بالاتری را می طلبند.

مدل آبشاری

برای نرم افزارهای معمولی، مدلهای چرخه حیات متعددی ایجاد شده است. مدل آبشاری کلاسیک، مدل اصلی چرخه حیات است که در شکل ۵-۶ نمایش داده شده است. این مدل برای برنامه نویسان نرم افزارهای معمولی بسیار آشنا است. در مدل آبشاری هر مرحله با یک فعالیت تصدیق و اعتبارسنجی (V&V) پایان می یابد تا مشکلات آن مرحله به حداقل برسد. همچنین دقت کنید که پیکانها فقط یک مرحله به جلو یا عقب می روند. این موضوع سبب می شود تا ایجاد دوباره سیستم بین دو مرحله مجاور، حداقل هزینه را در برداشته باشد در حالیکه ایجاد دوباره سیستم طی چند مرحله هزینه بالاتری در پی خواهد داشت.

اصطلاح دیگری که به چرخه حیات اطلاق می گردد مدل پردازش است زیرا این موضوع به دو مسئله اصلی در ایجاد نرم افزار مربوط می شود.

۱) بعد از این کار چه کاری باید انجام شود؟

۲) مرحله بعد طی چه مدت زمانی انجام می شود؟

مدل پردازش عملا یک فوق اسلوب یا فرا روش شناسی است زیرا ترتیب و مدت زمان لازم جهت اجرای روشهای نرم افزاری را مشخص می کند. روشهای ایجاد نرم ازار (متدولوژیها) موارد زیر را نشان می دهند.

روشهای خاص برای انجام یک مرحله نظیر

برنامه ریزی

احتیاجات

کسب دانش

آزمونها

نمایش محصول هر مرحله

مستندسازی

کد نویسی

نمودارها

مدل کدنویسی و اصلاح

تاکنون مدلهای پردازش بسیاری برای ایجاد نرم افزار مورد استفاده قرار گرفته اند. اولین مدل، مدل غیر معروف کدنویسی و اصلاح است که در آن ابتدا کدنویسی صورت می گیرد و سپس در صورتی که درست عمل نکند اصلاح می شود (Boehm 88). این روشی است که برنامه نویسان کم تجربه هم برای برنامه های متداول و هم برای سیستمهای خبره در پیش می گیرند.

از سال ۱۹۷۰ نقایص روش کدنویسی و اصلاح بخوبی مشهود شده بود و لذا مدل آبشاری برای ارائه یک روش سیستماتیک پدید آمد. این روش به ویژه برای پروژه های بزرگ مفید بود. ولی روش آبشاری نیز با مشکلاتی همراه بود زیرا در این مدل فرض می شود که همه اطلاعات لازم برای یک مرحله وجود دارد. اغلب مواقع در عمل این مکان وجود ندارد که بتوان یک بخش خاص را به طور کامل نوشت مگر اینکه قبلا یک نمونه آزمایشی از سیستم ساخته شده باشد. این موضوع موجب پدیدار شدن مفهوم جدیدی شد: «آن را دوبار انجام دهید.» یعنی در ابتدا با ساخت یک نمونه، احتیاجات را مشخص کرده و سپس سیستم اصلی را بسازید.

مدل افزایشی

مدل آبشاری افزایشی از بهبود روش آبشاری و روش استاندارد بالا به پائین بدست آمده است. ایده اصلی روش افزایشی این است که با افزای قابلیتهای عملکردی، نرم افزار بهبود یابد. مدل افزایشی در پروژه های بزرگ نرم افزاری متداول بسیار موفق عمل کرده است. همچنین در بعضی سیستمهای خبره که اضافه شدن قواعد، توانایی سیستم را از سطح دستیار به همکار و از همکار به سطح خبره افزایش می دهد، مدل افزایشی کاملا موفق عمل کرده است. بنابراین در یک سیستم خبره، توسعه یا افزایش کلی از سطح دستیار به سطح همکار و از سطح همکار به سطح خبره است. توسعه یا افزایش جزئی، میزان خبرگی را در هر سطحی افزایش می دهد که گاه بهبودهای مهمی را نیز صورت می دهد یک توسعه یا افزایش ریز عبارت از تغییر در خبرگی است که با اضافه شدن یا اصلاح یک قاعده منفرد صورت می گیرد.

مزیت اصلی این روش آن است که «افزایش قابلیتهای عملکردی» در مدل افزایشی را بسیار راحت تر از«محصول هر مرحله» در مدل آبشاری می توان مورد آزمون، تصدیق و اعتبارسنجی قرار داد. فرد خبره می تواند به جای یک اعتبارسنجی کامل و کلی در انتهای کار، هر افزایش عملکرد را بلافاصله مورد آزمون، تصدیق و اعتبارسنجی قرار دهد. این امر هزینه تصحیحهای کلی را در سیستم کاهش می دهد. در اصل مدل افزایشی شبیه به نمونه سازی سریع و پیوسته است که کل مراحل ایجاد سیستم را در بر می گیرد. بر خلاف روش «آن را دوبار انجام دهید» که برای تعیین احتیاجات سریعا یک نمونه از مراحل اولیه می سازد، در این روش نمونه متکامل شونده بنوعی همان سیستم مورد نظر ماست.

مدل مارپیچی

همان طور که شکل ۶-۶ نشان می دهد مدل افزایشی را می توان به صورت تعدیلی از یک مدل مارپیچی متداول تجسم کرد. در هر حلقه مارپیچ، توانایی های عملکردی جدیدی به سیستم اضافه می شود. آخرین نقطه که «سیستم تحویل شده» نام دارد عملا پایان مارپیچ نیست. بلکه با شروع نگهداری و ارتقاء سیستم یک مارپیچ جدید شروع می شود. این مارپیچ را می توان اصلاح کرد تا مراحل کلی کسب دانش، کدنویسی، ارزشیابی و برنامه ریزی به طور دقیق تر مشخص شوند.

سیستم خبره قسمت 1
سیستم خبره قسمت 2
سیستم خبره قسمت 3
سیستم خبره قسمت 4
سیستم خبره قسمت 5
سیستم خبره قسمت 6