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

برنامه نویسی Parallel در سی شارپ و آشنایی با کلاس Task در سی شارپ

در قسمت قبل گفتیم که بوسیله کلاس Parallel و متدهای For و ForEach عملیات پردازش بر روی مجموعه ها را به صورت Parallel انجام دهیم. اما بحث Parallel Programming به همین جا ختم نمی شود و راه های دیگری نیز برای برنامه نویسی Parallel وجود دارد. یکی از این روش ها استفاده از کلاس Task است که این کلاس نیز در فضای نام System.Threading.Tasks قرار دارد. حالت های مختلفی برای استفاده از این کلاس وجود دارد که ساده ترین آن استفاده از خصوصیت Factory و متد StartNew است که در زیر نمونه ای از نحوه ایجاد یک Task را مشاهده می کنید:

 
Task.Factory.StartNew(()  = >
{
    Console.WriteLine("Task Started in Thread {0}", Thread.CurrentThread.ManagedThreadId);
    for (int i = 1; i  < =  100; i++)
    {
        Console.WriteLine(i);
        Thread.Sleep(500);
    }
});

بوسیله کد بالا، یک Task جدید ایجاد شده که اعداد 1 تا 100 را در یک thread جداگانه در خروجی چاپ می شود. دقت کنید که بعد از اجرای برنامه شناسه Thread ای که Task در آن اجرا می شود با شناسه Thread اصلی برنامه متفاوت است. راهکار بعدی ایجاد یک شئ از روی کلاس Task و ارجرای آن است، در کد زیر Task بالا را به صورت ایجاد شئ ایجاد می کنیم:

 
Task task = new Task(()  = >
{
    Console.WriteLine("Task Started in Thread {0}", Thread.CurrentThread.ManagedThreadId);
    for (int i = 1; i  < = 100; i++)
    {
        Console.WriteLine(i);
        Thread.Sleep(500);
    }
});
 
task.Start();
Console.ReadKey();

زمانی که Task جدیدی ایجاد می کنید بوسیله متد Start که برای کلاس Task تعریف شده است می توانید عملیات اجرای Task را شروع کنید. یکی از خصوصیت های تعریف شده در کلاس Task، خصوصیت IsCompleted است که بوسیله آن می توان تشخیص داد که Task در حال اجراست یا خیر:

 
Task task = new Task(()  = >
{
    Console.WriteLine("Task Started in Thread {0}", Thread.CurrentThread.ManagedThreadId);
    for (int i = 1; i < =  100; i++)
    {
        Console.WriteLine(i);
        Thread.Sleep(500);
    }
});
 
task.Start();
while (!task.IsCompleted)
{
                 
}

دریافت خروجی از کلاس Task

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

 
public static int CalcAverage()
{
    int sum = 0;
 
    for (int i = 1; i < = 100; i++)
    {
        sum += i;
    }
 
    return sum/100;
}

در قدم بعدی می بایست یک Task جنریک از نوع int تعریف کنیم و به عنوان سازنده نام متد تعریف شده را به آن ارسال کنیم:

 
Task < int >  task = new Task < int > (CalcAverage);
task.Start();
 
Console.WriteLine("Average: {0}", task.Result);

در کلاس بالا بعد از Start کردن Task، بوسیله خصوصیت Result می توانیم نتیجه خروجی از Task را بگیریم، دقت کنید که زمانی که می خواهیم مقدار خروجی را از Task بگیریم، برنامه منتظر می شود تا عملیات Task به پایان برسد و سپس نتیجه در خروجی چاپ می شود.

به این موضوع توجه کنید که بوسیله متد StartNew نیز می توان Task هایی که پارامتر خروجی دارند تعریف کرد:

 
var task = Task.Factory.StartNew < int > (CalcAverage);

کد بالا دقیقاً کار نمونه قبلی را انجام می دهد، فقط به جای ایجاد شئ Task و فراخوانی آن، از متد StartNew استفاده کردیم.

ارسال پارامتر به Task ها

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

 
public class TaskParameters
{
    public int Start { get; set; }
    public int Finish { get; set; }
}

در ادامه کد متد CalcAverage را به صورت زیر تغییر می دهیم:

 
public static int CalcAverage(object state)
{
    var parameters = (TaskParameters) state;
    int sum = 0;
 
    for (int i = parameters.Start; i < = parameters.Finish; i++)
    {
        sum += i;
    }
 
    return sum/100;
}

در قدم بعدی باید روند ساخت شئ Task را به گونه ای تغییر دهیم که پارامترهای مورد نظر به عنوان state به متد CalcAverage ارسال شوند، برای اینکار به عنوان پارامتر دوم سازنده کلاس Task شئ ای از نوع TaskParameters به صورت زیر ارسال می کنیم:

 
Task < int > task = new Task < int > (CalcAverage, new TaskParameters()
{
    Start = 100,
    Finish = 1000
});

با انجام تغییرات بالا، توانستیم شئ ای را به عنوان State به Task ارسال کنیم، همچنین توجه کنید که امکان ارسال State بوسیله متد StartNew در خصوصیت Factory نیز وجود دارد. در این بخش با کلاس Task آشنا شدیم، در قسمت بعدی با نحوه متوقف کردن Task ها در زمان اجرا و کلاس CancellationToken آشنا می شویم.

منبع


قسمت اول آموزش-برنامه نویسی Asynchronous – آشنایی با Process ها، Thread ها و AppDomain ها

قسمت دوم آموزش- آشنایی با ماهیت Asynchronous در Delegate ها

قسمت سوم آموزش-آشنایی با فضای نام System.Threading و کلاس Thread

قسمت چهارم آموزش- آشنایی با Thread های Foreground و Background در دات نت

قسمت پنجم آموزش- آشنایی با مشکل Concurrency در برنامه های Multi-Threaded و راهکار های رفع این مشکل

قسمت ششم آموزش- آشنایی با کلاس Timer در زبان سی شارپ

قسمت هفتم آموزش-آشنایی با CLR ThreadPool در دات نت

قسمت هشتم آموزش- مقدمه ای بر Task Parallel Library و کلاس Parallel در دات نت

قسمت نهم آموزش- برنامه نویسی Parallel:آشنایی با کلاس Task در سی شارپ

قسمت دهم آموزش-برنامه نویسی Parallel در سی شارپ :: متوقف کردن Task ها در سی شارپ – کلاس CancellationToken

قسمت یازدهم آموزش- برنامه نویسی Parallel در سی شارپ :: کوئری های Parallel در LINQ

قسمت دوازدهم آموزش- آشنایی با کلمات کلیدی async و await در زبان سی شارپ

قسمت سیزدهم آموزش- استفاده از متد WhenAll برای اجرای چندین Task به صورت همزمان در سی شارپ

معرفی سیستم ایمنی مصنوعی(Artificial Immune System)

ایمنی از مولکول ها،سلول ها و قوانینی تشکیل شده که از آسیب رساندن عواملی مانند پاتوژن ها(Pathogens) به بدن جلوگیری می کند، قسمتی از پاتوژن به نام آنتی ژن(Antigen) که توسط این سیستم قابل شناسایی و موجب فعال شدن پاسخ سیستم ایمنی می شود. یک نمونه ای از پاسخ سیستم ایمنی ترشح آنتی بادی توسط سلول های B ،که آنتی بادی ها مولکول های شناساگری به شکل Y هستند که به سطح سلول های B متصل است و با یکسری قوانین از پیش تعریف شده آنتی ژن را شناسایی می کنند. مولکول های آنتی بادی قسمتی از آنتی ژن را به نام اپیتوپ شناسایی می کنند،ناحیه ای از آنتی بادی که وظیفه شناسایی و اتصال به آنتی ژن را دارد پاراتوپ گویند که با نام V شناخته می شود، که به منظور ایجاد بیشترین میزان تطابق با آنتی ژن ها می توانند شکل خود را تغییر دهند و به همین دلیل ناحیه متغیر نامیده می شود.

سیستم ایمنی مصنوعی

 

سطوح سیستم ایمنی

     1. اولين سطح – پوست

     2. دومین سطح – ايمني فيزيولوژيکي

  • اشک چشم ، بزاق دهان ، عرق و …

     3. سومین سطح – ایمنی ذاتی

  • پاسخ عمومی به آنتی ژن ها
  • بسیار کند

4. چهارمین سطح – ایمنی اکتسابی

  • پاسخ اختصاصی به آنتی ژن ها
  • بسیار سریع

سیستم ایمنی مصنوعی

ایمنی ذاتی(Innate Immunity)

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

 

واکنش دستگاه ایمنی ذاتی نسبت به عفونت

واکنش دستگاه ایمنی ذاتی نسبت به عفونت

 

ایمنی اکتسابی (Adaptive Immunity)

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

لنفسیت ها (Lymphocytes)

شناسایی آنتی ژن ها برعهده گلبول های سفید خون که لنفسیت نام دارد و دو نوع لنفسیت B و لنفسیت T داریم و در ادامه در مورد هر کدام توضیح خواهیم داد.

 لنفسیت های نوع B

 سلول های بنیادی که در مغز استخوان تولید می شوند و هر سلول B تعداد گیرنده سلولی (B-Cell Receptor) یا آنتی بادی(Antibody) در سطح خود دارد و هرکدام از این آنتی بادی ها دارای اشکال متفاوتی هستند که هر شکلی شبیه به سلول B را دارند و در نتیجه آنتی بادی هایی که توسط سلول B ساخته شده اند به مجموعه مشابهی از الگوهایی مولکولی متصل می شوند. آنتی بادی های سلول B دو ارزشی و دو عملکردی هستند، دو ارزشی به این دلیل که از طریق دو بازوی Fab به دو آنتی ژن متصل می شوند و از طریق قسمت FC به پذیرنده خاص روی سطح سلول های ایمنی دیگر وصل می شوند. اتصال به آنتی ژن دو نقش را بازی می کند که نقش اصلی آن برچسب زدن به آنتی ژن به عنوان یک مخرب تا مابقی سلول های سیستم ایمنی آن را تخریب کنند به این عملیات آماده مرگ می گویند، این کار با اتصال نواحی Fab آنتی بادی به آنتی ژن صورت می گیرد و ناحیه FC دستنخورده باقی می ماند تا اتصال با سلول های ایمنی دیگر مانند ماکروفاژها(Macrophages) صورت می پذیرد، یک آنتی بادی از دو زنجیره سبک مشابه (L) و دو زنجیره سنگین مشابه (H) تشکیل شده است که در شکل زیر نشان داده شده است.

 

سیستم ایمنی مصنوعی

 

لنفسیت های نوع T

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

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

لنفسیت های نوع T

ویژگی های سیستم ایمنی بدن

سیستم ایمنی بدن شامل خصوصیاتی که بالطبع سیستم ایمنی مصنوعی از آن پیروی می کند که به صورت خلاصه در مورد هر کدام توضیح داده شده است:

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

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

3- قابلیت یادگیری: سیستم ایمنی بدن قادر است که ویروس های جدیدی را که مشاهده می کند به خاطر می سپارد.

4- همکاری گروهی: در سیستم ایمنی سلول ها به صورت گروهی، موازی و توزیع شده برای تشخیص و انهدام همکاری دارند.

5- چند لایه ای بودن: هیچ موجودیتی در سیستم ایمنی بدن انسان یک مکانیزم کامل امنیتی و دفاعی را فراهم نمی کند بلکه هر لایه سیستم ایمنی به صورت مستقل عمل کرده و با بقیه لایه ها در ارتباط است.

6- تنوع و گوناگونی: سیستم ایمنی بدن در برابر انواع مختلفی از نفوذها مقاومت کرده و تسلیم نمی شود.

7- بهینه بودن منابع: در سیستم ایمنی با ایجاد مرگ سلولی و تکثیر سلولی، یک نمونه فضای کوچکی از فضای جستجوی آنتی ژن ها در هر زمان نگه داری می کنند.

8- پاسخ انتخابی: در سیستم ایمنی بدن پس از شناسایی یک آنتی ژن پاسخ های متفاوتی داده می شود که به یک شکل عمل نمی کنند.

9- تنظیم تعداد سلول های ایمنی توسط سیستم ایمنی

 سیستم ایمنی مصنوعی

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

کاربردهای سیستم ایمنی مصنوعی

AIS یکی از الگوریتم های الهام گرفته از سیستم ایمنی بدن انسان است و راه حل هایی را برای مسائل پیچیده ارائه داده اند و از جمله کاربردهای آن عبارتند از:

خوشه بندی (Clustering)

زمانبندی (Scheduling)

تشخیص عیب (Fault Detection)

تشخیص ناهنجاری (َAnomaly Detection)

امنیت اطلاعات (Security Infrmation)

مسائل بهینه سازی (Optimization problems)

دسته بندی الگوها (Patterns Classification)

سیستم های یادگیرنده (Learning system)

تشخیص نفوذ (Intrusion Detection)

مراحل سیستم ایمنی مصنوعی

 برای حل مساله با استفاده از  AIS باید 3 مرحله زیر انجام پذیرد:

1- نحوه نمایش داده های مساله (تعریف فضای شکل)

2- معیار اندازه گیری میل ترکیبی

3-انتخاب یک الگوریتم ایمنی مصنوعی برای حل مساله

فضای شکل (Shape Space)

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

نحوه محاسبه و میل ترکیبی آنتی بادی با آنتی ژن

هر چه آنتی بادی میل ترکیبی بیشتری با آنتی ژن داشته باشد یعنی هر چه فاصله آنتی بادی و آنتی ژن کمتر شود مکمل بهتری برای آنتی ژن است و میل ترکیبی را می توان به صورت شباهت آرایه ها در نظر گرفت. که بر همین اساس در الگوریتم AIS از فاصله به عنوان معیار ارزیابی خوب یا بد بودن یک آنتی بادی استفاده می شود.

الگوریتم های AIS

الگوریتم های AIS به 3 دسته تقسیم می شوند:

1- دسته اول الگوریتم هایی که بر مبنای انتخاب کلونی سلول های B ایجاد شده اند.

2- دسته دوم الگوریتم هایی که بر مبنای انتخاب معکوس سلول های T ایجاد شده اند.

3- دسته سوم بر مبنای تئوری شبکه ایمنی ایجاد شده اند.

انتخاب کلونی (Clonal Selection)

زمانی که سلول B آنتی ژن را شناسایی می کند و سلول های B شروع به تکثیر شدن می کنند و تعداد زیادی سلول B یکسان و مشابه تولید می شود، 12 ساعت طول می کشد که یک سلول B رشد کرده و به دو سلول تبدیل شود و بعد از تحریک شدن دوره تکثیر حدودا یک هفته طول می کشد و از یک سلول 2 به توان 14 (16000) سلول مشابه تولید می شود و هر چه میل پیوندی بین سلول B و آنتی ژن بیشتر شود نرخ تکثیر بیشتر خواهد شد، در نتیجه سلول های B با میل پیوندی بالاتر، کلونی بیشتری تولید می کنند که اصل انتخاب کلونی نام دارد.

اصل انتخاب کلونی در AIS الگوریتم خاص خودش را دارد که بعد از تکثیر شدن سلول های B شروع به بالغ شدن می کنند که این فرایند در 3 مرحله صورت می پذیرد:

1- دگرگونی ایزوتایپ

2- بلوغ میل پیوندی

3- تصمیم گیری بین حافظه یا پلاسما شدن سلول B

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

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

انتخاب کلونی (Clonal Selection)

انتخاب معکوس (Negative Selection)

میل ترکیبی سلول های T نابالغ با سلول های موجود در تیموس بررسی می شود و هرکدام از سلول های T نابالغ میل ترکیبی زیادی با یکی از سلول ها داشته باشند حذف می شوند و سایر سلول های T وارد جریان خون می شوند که  به این گونه انتخاب در آن برای حدف شدن انتخاب می شود انتخاب معکوس گویند.

 

انتخاب معکوس (Negative Selection)

 

تئوری شبکه ایمنی (Immune Network Theory)

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

 

تئوری شبکه ایمنی (Immune Network Theory)

 

در هر الگوریتم AIS باید به 3 نکته توجه داشت:

1- در هر الگوریتم AIS باید حداقل یک جزء ایمنی مانند لنفسیت باشد.

2- در هر الگوریتم AIS باید ایده ای برگرفته از بیولوژی نظری یا تجربی باشد.

3- الگوریتم AIS که طراحی می شود باید به حل مسئله کمک کند.

مقایسه سیستم ایمنی طبیعی و الگوریتم های ایمنی مصنوعی

 

مقایسه سیستم ایمنی طبیعی و الگوریتم های ایمنی مصنوعی

 

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

استخراج قوانین انجمنی با استفاده از سیستم ایمنی مصنوعی

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

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

 

منبع

به عنوان یک قانون کلی که در مقالهOptimum population size and mutation rate for a simple real genetic algorithm that optimizes array factors  به آن اشاره شده (لینک مقاله در انتها آورده شده) اندازه جمعیت به تعداد ژن ها بستگی دارد. بنابراین ۹ ژن  به ۱۶ کروموزوم نیاز دارد و ۱۶ ژن به ۳۲ کروموزوم. معمولا با انتخاب اندازه حمعیتی معادل با ۱٫۵ تا ۲ برابر تعداد ژن ها شروع می شود تا به ماکزیمم اندازه جمعیت ۱۰۰ برسیم.

برای فضاهای حالت پیچیده احتمال crossover بالاتر (بیش از ۰٫۵) به جستجو در ابتدای کار کمک می کند. با این وجود در ادامه باید به مقادیری نزدیک به ۰٫۱ یا ۰٫۲ کاهش یابد. احتمال میوتیشن باید پایین نگه داشته شود (۰٫۰۱ – ۰٫۱). در غیر اینصورت همگرایی بی دلیل به تعویق می افتد.

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

ولی به عنوان یک قانون کلی:

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

اگر احتمال crossover بسیار بزرگ باشد: جمعیت هیچ گاه همگرا نمی شود

در ادامه الگوریتم مورد استفاده برای مسئله ۸ وزیر بارها وبارها با پارامترهای مختلف اجرا شده است تا بهترین پارامترها در نظر گرفته شود.

به این صورت عمل شده است که از آنجایی که تعداد ژن ها برابر با ۸ است ابتدا از ۱٫۵ برابر آن یعنی ۱۲ شروع شده است. یعنی مقدار جمعیت برای بار اول برابر با ۱۲ قرار داده شده است. تعداد نسل ها برابر با تعداد تکرار است. تعداد نسل را نصف تعداد جمعیت قرار می دهیم و از احتمال میویتش ۰٫۰۱ و احتمال crossover 0.5 استفاده می کنیم. لینک دانلود مرجع کد برنامه در انتها آورده شده است.

همان طور که مشاهده می شود نتیجه خوب نیست

تغییر تعداد جمعیت به دو برابر تعداد ژن ها:

هنوز به فیتنس ۲۸ یعنی تعداد برخوردهای ۰ نرسیده ایم.

در محله بعدی تکرار افزایش می یابد:

حال برای مقایسه مقدار crossover افزایش می یابد:

در این حالت هم به global maximum نرسیدیم و در دام بهینه محلی افتادیم.

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

نتیجه بدتر شد. مجددا به حالت قبل بر می گردانیم:

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

در مرحله بعد تعداد جمعیت را به ۲۰ افزایش میدهیم:

نتیجه تغییر چندانی ندارد.

همان طور که در شکل بالا مشاهده می شود اندازه نسل نیز افزایش یافت ولی تغییر چندانی حاصل نشد.

به نظر می رسد تعداد جمعیت باید تغییر زیادی داشته باشد تا نتیجه بیشتر تغییر کند:

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

حال می توان میتویشن و crossover را تغییر داد:

کاهش crossover در این حالت نتیجه را خراب کرد

در حالت فوق میوتیشن کمی افزایش داده شد

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

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

در تصویر فوق مشاهده می شود که به علت قرار گیری عدد بزرگ در crossover به هیچ وجه همگرا نمی شود

تا کنون بهترین حالتی که مشاهده شد تصویر فوق است. که با در نظر گرفتن جمعیت نرمال ۱۰۰ ، تعداد تکرار نصف جمعیت یعنی ۵۰ و مقدار احتمال میوتیشن ۰,۰۱ و crossover برابر با ۰٫۰۷ به ۶ جواب بهینه رسیدیم. یعنی ۶ کروموزومی پیدا شدند که فیتنس ۲۸ و ماکزیمم دارند.

اجرای ۸ وزیر در متلب:

در کد زیر که با الهام از الگوریتم تپه نوردی نوشته شده پس از اجرا برای جمعیت برابر با ۱۰۰۰ و تعداد تکراری برابر با ۱۰۰ به ۲۰ جواب بهینه رسیدیم. در اینجا نیز تنظیم پارامترها دست شما است و می توان به جواب بهتری رسید


pop=1000;                                         %total population always

gen=100;                                           %total generations

n=8;

max_fitness=(((n-1)*n)/2);

initpop=zeros(pop,n);                            %initial population

pop_fitness=zeros(pop,1);                        %population fitness matrix

pop_fitness_sorted=zeros(pop,1);                 %for sorted fitness

fitness_temp=0;                                  %fitness temporary variable used in fitness loops between k and j

actual_pop_temp=zeros(1,n);

actual_pop_sorted=zeros(pop,n);

z=0;                                             %temporary variable used for simplicity

s=1;

w=0;

solution=zeros(1000,n);                           % solution matrix

cross_over_temp_mat=zeros(pop/2,n);              %cross-over variables

cross_over_ready_pop=zeros(pop,n);

cross_over_pop_final=zeros(pop,n);

cross_over_point=0;

cross_over_pop_temp_one=zeros(1,n);

cross_over_pop_temp_two=zeros(1,n);

cross_over_pop_temp_adjust=0;

cross_over_child_two_flipped=zeros(1,n);

cross_over_child_one=zeros(1,n);

cross_over_child_two=zeros(1,n);

mutation_temp_one=0;                             %mutation variables

mutation_temp_two=0;

mutation_temp_data=0;

for i=1:pop

initpop(i,:)=randperm(n);   %random initial population –indicates queen position on board

end;

actual_pop=initpop;                                 %duplication for working on this variable and keeping initial population intact

%generations loop

for q=1:gen

%for one generation

for i = 1:pop

fitness_temp=0;

%fitness calculation loop

for k=1:(n-1)                                               %calculates fitness by position manipulation

for j=k+1:n                                         %queen movements have been covered using j and k manipulation

z=abs(actual_pop(i,k)-actual_pop(i,j));          % for example   : when one queen is at (3,1)–(row,column)

if (ne(z,0)&& ne(z,(j-k)))                      %                next queens cant be at {(2,2),(3,2),(4,2) } {(1,3),(3,3),(5,3)}

fitness_temp=fitness_temp+1;               %                now you can observe that subtraction of each queen position and next

end                                             %                column queen position tells us a lot of information.

end                                                 %                remember the actual pop contains queen position dont confuse them with ‘i’ & ‘j’

end

pop_fitness(i,1)=fitness_temp;

end

%sort for individuals with good fitness

pop_fitness_sorted=pop_fitness;

actual_pop_sorted=actual_pop;

for i=1:(pop-1)

for j=i+1:pop

if(pop_fitness_sorted(i,1)<pop_fitness_sorted(j,1))

fitness_temp=pop_fitness_sorted(i,1);

pop_fitness_sorted(i,1)=pop_fitness_sorted(j,1);

pop_fitness_sorted(j,1)=fitness_temp;

actual_pop_temp(1,:)=actual_pop_sorted(i,:);

actual_pop_sorted(i,:)=actual_pop_sorted(j,:);

actual_pop_sorted(j,:)=actual_pop_temp(1,:);

end

end

end

% for unique solution gathering

%specified a vector of 100 rows ‘n’ columns

for i=1:pop

if(pop_fitness_sorted(i,1)==max_fitness)

for j=1:s

if actual_pop_sorted(i,:)==solution(j,:)

w=w+1;

else

w=w;

end

end

if w==0

solution(s,:)=actual_pop_sorted(i,:);

s=s+1;

else

continue;

end

end

w=0;

end

%selection

for i=1:(pop/2)

cross_over_temp_mat(i,:)=actual_pop_sorted(i,:);

end

cross_over_ready_pop=repmat(cross_over_temp_mat,2,1);

cross_over_pop_final=cross_over_ready_pop;

%cross over part begins

%for detail explaination cross over logic refer to the pdf attached

%logic—get random crossover point–then cross over at that point

%if two same values of rows in one individual..then adjust crossover

%according to the logic give in the pdf

while 1,

cross_over_point=floor(n*rand(1));

if cross_over_point~=0

break;

end

end

i=1;

while i<(pop-1),

cross_over_pop_temp_one(1,:)=cross_over_ready_pop(i,:);         %copied parents

cross_over_pop_temp_two(1,:)=cross_over_ready_pop(i+1,:);       %copied parents

%for child one

for j=1:cross_over_point

for k=j:n

if (cross_over_pop_temp_one(1,j)==cross_over_pop_temp_two(1,k))

cross_over_pop_temp_adjust=cross_over_pop_temp_two(1,j);

cross_over_pop_temp_two(1,j)=cross_over_pop_temp_two(1,k);

cross_over_pop_temp_two(1,k)=cross_over_pop_temp_adjust;

break;

end

end

end

for j=1:cross_over_point

cross_over_child_one(1,j)=cross_over_pop_temp_one(1,j);

end

for j=cross_over_point:n

cross_over_child_one(1,j)=cross_over_pop_temp_two(1,j);

end

%for child two

cross_over_pop_temp_two(1,:)=cross_over_ready_pop(i,:);         %copied parents

cross_over_pop_temp_one(1,:)=cross_over_ready_pop(i+1,:);       %copied parents

for j=1:cross_over_point

for k=j:n

if (cross_over_pop_temp_one(1,j)==cross_over_pop_temp_two(1,k))

cross_over_pop_temp_adjust=cross_over_pop_temp_two(1,j);

cross_over_pop_temp_two(1,j)=cross_over_pop_temp_two(1,k);

cross_over_pop_temp_two(1,k)=cross_over_pop_temp_adjust;

break;

end

end

end

for j=1:cross_over_point

cross_over_child_two(1,j)=cross_over_pop_temp_one(1,j);

end

for j=cross_over_point:n

cross_over_child_two(1,j)=cross_over_pop_temp_two(1,j);

end

cross_over_pop_final(i,:)=cross_over_child_one(1,:);

cross_over_child_two_flipped=wrev(cross_over_child_two);                 %flipped

cross_over_pop_final(i+1,:)=cross_over_child_two_flipped(1,:);

i=i+2;

end

%mutation introduced

%mutation occours  :at every 5th individual..swapping of two random

%                   column values(that is queen positions)

i=5;

while i<pop,

mutation_temp_one=floor(rand(1)*n/2);

mutation_temp_two=floor(2*(rand(1)*n/2));

if (mutation_temp_one==0 || mutation_temp_two==0)

continue;

else

mutation_temp_data=cross_over_pop_final(i,mutation_temp_one);

cross_over_pop_final(i,mutation_temp_one)=cross_over_pop_final(i,mutation_temp_two);

cross_over_pop_final(i,mutation_temp_two)=mutation_temp_data;

end

i=i+5;

end

i=0;

actual_pop=cross_over_pop_final;%the most important statement for my code

end

f=figure(‘Position’,[50 100 1000 600]);

cnames = {‘1′,’2′,’3′,’4′,’5′,’6′,’7′,’8′,’9′,’10’,’11’,’12’};

rnames = {‘solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,…

‘solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,…

‘solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,…

‘solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,…

‘solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,…

‘solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,…

‘solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,…

‘solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,…

‘solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,…

‘solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,’solution’,…

‘solution’,’solution’,’solution’,’solution’};

t = uitable(‘Parent’,f,’Data’,solution,’ColumnName’,cnames,…

‘RowName’,rnames,’Position’,[10 100 1000 500]);

 
 

با تغییر جمعیت به ۱۰۰ و تکرار به ۵۰:

به ۳ جواب بهینه رسیدیم:

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


function queen

clc;

counter = 0;

n = 8;

board = zeros(1,n);

[board,counter] = back(1, board,counter);

fprintf(‘Solution count: %d\n’,counter);

%%

function value =  isSolution(board)

for  i = 1:length(board)

for  j = (i+1): length(board)

if abs(board(i) – board(j)) == abs(i-j)

value = false;

return;

end

end

end

value = true;

%%

function [board,counter] =  back(depth, board,counter)

if  (depth == length(board)+1) && isSolution(board)

counter = counter + 1;

disp(board);

end

if ( depth <= length(board))

for  i = 1:length(board)

if ~any(board==i)

board(1,depth) = i;

[~,counter] = back(depth+1, board,counter);

end

end

end

 

بخشی از جواب ها بصورت زیر است:

۱     ۵     ۸     ۶     ۳     ۷     ۲     ۴

۱     ۶     ۸     ۳     ۷     ۴     ۲     ۵

۱     ۷     ۴     ۶     ۸     ۲     ۵     ۳

۱     ۷     ۵     ۸     ۲     ۴     ۶     ۳

۲     ۴     ۶     ۸     ۳     ۱     ۷     ۵

۲     ۷     ۵     ۸     ۱     ۴     ۶     ۳

۲     ۸     ۶     ۱     ۳     ۵     ۷     ۴

۳     ۱     ۷     ۵     ۸     ۲     ۴     ۶

۳     ۵     ۲     ۸     ۱     ۷     ۴     ۶

۳     ۵     ۲     ۸     ۶     ۴     ۷     ۱

۳     ۵     ۷     ۱     ۴     ۲     ۸     ۶

۳     ۵     ۸     ۴     ۱     ۷     ۲     ۶

۳     ۶     ۲     ۵     ۸     ۱     ۷     ۴

۳     ۶     ۲     ۷     ۱     ۴     ۸     ۵

۳     ۶     ۲     ۷     ۵     ۱     ۸     ۴

۳     ۶     ۴     ۱     ۸     ۵     ۷     ۲

۳     ۶     ۴     ۲     ۸     ۵     ۷     ۱

۳     ۶     ۸     ۱     ۴     ۷     ۵     ۲

۳     ۶     ۸     ۱     ۵     ۷     ۲     ۴

۳     ۶     ۸     ۲     ۴     ۱     ۷     ۵

۳     ۷     ۲     ۸     ۵     ۱     ۴

Solution count: 92

منبع

مسئله چند وزیر قسمت 1
مسئله چند وزیر قسمت 2
مسئله چند وزیر قسمت 3
مسئله چند وزیر قسمت 4

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

اولین و مشهورترین شکل این مسئله معمای هشت وزیر است که برای حل آن باید ۸ وزیر را در یک صفحهً معمولی (۸×۸) شطرنج قرار داد. این مسئله ۹۲ جواب دارد که ۱۲ جواب آن منحصر به‌فرد است یعنی بقیه جواب‌ها از تقارن جواب‌های اصلی به‌دست می‌آید.

مسئله n وزیر در صورتی جواب دارد که n مساوی ۱ یا بیشتر از ۳ باشد. یعنی مسئله دو وزیر و سه وزیر راه حلی ندارند.

تاریخچه

این مسئله در سال ۱۸۴۸ توسط شطرنج بازی به نام Max Bezzel عنوان شد و ریاضی دانان بسیاری ازجمله Gauss و Georg Cantor بر روی این مسئله کار کرده و در نهایت آن را به n وزیر تعمیم دادند. اولین راه حل توسط Franz Nauck در سال ۱۸۵۰ ارائه شد که به همان مسئله n وزیر تعمیم داده شد. پس از آن Gunther راه حلی با استفاده از دترمینان ارائه داد که J.W.L. Glaisher آن را کامل نمود. در سال ۱۹۷۹، Edsger Dijkstra Nauck این مسئله را با استفاده از الگوریتم عقب‌گرد حل کرد.

حل مسئله

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

Variables: { Q1, Q2, Q3, Q4 }

Domain: { (1, 2, 3, 4), (1, 2, 3, 4), (1, 2, 3, 4), (1, 2, 3, 4) }

Constraints: Alldifferent( Q1, Q2, Q3, Q4 ) and 
for i = 0...n and j = (i+1)...n, k = j-i, Q[i] != Q[j] + k and Q[i] != Q[j] - k

و این الگوریتم که برای جواب هر خانه‌است به دست می‌آید که یک csp است

min-conflicts(csp, max):
initial := complete assignment ;jamiyate avaliye
for 1..max do: ;az 1 .. akharin khane
if initial is a solution: ;if jamiyate tolide javab bod 
return initial ;barmigardanad
var := nextVar() ;da ghire indorat yek motaghair be jelo
value := leastConflicts( var ) ;taeein meghdar
var := value in initial ;gharar dadan meghdar dar motaghair
return failure ;bargash be ebtedaye algoritm

صورت مسئله

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

شمردن تعداد جواب‌ها

جدول زیر تعداد راه حل‌ها برای قرار دادن n وزیر بر روی صفحه n × nنشان می‌دهد. هر دو منحصر به فرد و متمایز، برای تعداد ۱-۱۴،۲۴-۲۶ است.

مسئله ی چند وزیر

  • توجه:

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

روش‌های حل مسئله

الگوریتم عقبگرد

از تکنیک عقبگرد Backtracking برای حل مسائلی استفاده می‌شود که در آن‌ها دنباله‌ای از اشیاء از یک مجموعه مشخص انتخاب می‌شود، به‌طوری‌که این دنباله، ملاکی را در بر می‌گیرد. عقبگرد حالت اصلاح شدهٔ جستجوی عمقی یک درخت است. این الگوریتم همانند جستجوی عمقی است، با این تفاوت که فرزندان یک گره فقط هنگامی ملاقات می‌شوند که گره امید بخش باشد و در آن گره حلی وجود نداشته باشد. با توجه به اینکه هیچ ۲ وزیری نباید همدیگر را گارد کنند و در یک سطر نمی‌توانند باشند، تعداد کل حالت‌ها برای n=۴ برابر ۴*۴*۴*۴=۲۵۶ است. در شطرنج یک وزیر می‌تواند به مهره‌هایی که در خانه‌های عمود یا مورب به وی قرار دارند حمله کند. یا به عبارت ریاضی، اگر ردیفها و ستونهای شطرنج را از یک تا هشت شماره‌گذاری کنیم و وزیر در خانه (i، j) قرار داشته باشد، مهره‌هایی که در خانه‌های (i، m) یا (m، j) یا (i ± m، j ± m) قرار دارند توسط وزیر تهدید می‌شوند.

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

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

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

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

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

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

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

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

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

به یک جواب می‌رسیم. حال اگر فرض کنیم که این خانه جواب نیست و به مسیر خود ادامه دهیم، احتمالاً” می‌توانیم جوابهای دیگری نیز بیابیم.

شبه کد پیاده‌سازی الگوریتم عقبگرد برای مسئله n وزیر

void queens (index i)
{
	index j;
	if (promising(i))
		if (i == n)
			cout << col[1] through col[n];
		else
			for (j = 1; j <= n; j++) {
				col[i + 1] = j;
				queens(i + 1);
			}
}
bool promising (index i)
{
	index k;
	bool Switch;
	k = 1;
	Switch = true ;
	while (k < i && switch) {
		if (col[i] == col[k] || abs(col[i] – col[k] == i - k))
			switch = false;
		k++;
	}
	return Switch;
}

برنامه زبان C به صورت غیر بازگشتی

# include <stdio.h>

int b[8];

inline static int unsafe(int y) {
        int i, t, x;
        x = b[y];
        for (i = 1; i <= y; i++) {
                t = b[y - i];
                if ((t == x) ||
                     (t == x - i) ||
                     (t == x + i)) {
                        return 1;
               }
       }

        return 0;
}

static void putboard(void) {
        static int s = ۰;
        int x, y;
        printf("\n\nSolution #٪i\n", ++s);
        for (y = 0; y < 8; y++) {
                for (x = 0; x < 8; x++) {
                        printf((b[y] == x) ? "|Q": "|_");
               }
                printf("|\n");
       }
}

int main(void) {
        int y = ۰;
        b[۰] = -۱;
        while (y >= ۰) {
                do {
                        b[y]++;
               } while ((b[y] < 8) && unsafe(y));
                if (b[y] < 8) {
                        if (y < 7) {
                                b[++y] = -۱;
                       } else {
                                putboard();
                       }
               } else {
                        y--;
               }
       }

        return 0;
}

برنامه زبان ++C به صورت بازگشتی

  • برنامه زیر برای هشت وزیر نوشته شده‌است با انتخاب اعداد دیگر به جای هشت در define MAXSIZE 8 # می‌توان برای تعداد دیگری وزیر نیز استفاده کرد.
# include <assert.h>
# include <stdio.h>

# define MAXSIZE 8
class EightQueens
{
    int m_size;				
    int m_solution_count;		
    int m_attempt_count;		
    int m_queen[MAXSIZE];		
    bool m_row_inuse[MAXSIZE]; 		
    bool m_diag_rise[MAXSIZE*2];	
    bool m_diag_fall[MAXSIZE*2];	

public:

    EightQueens(int size, bool is_alt) {

	assert(size <= MAXSIZE);

	m_size = size;
	m_solution_count = 0;
	m_attempt_count = 0;

	for (int i = 0; i < m_size; i++) {
	    m_queen[i] = i;
	    m_row_inuse[i] = 0;
	}

	for (int j = 0; j < m_size*2; j++) {
	    m_diag_rise[j] = 0;
	    m_diag_fall[j] = 0;
	}

	if (is_alt) SearchAlt(0);
	else        Search(0);

   }

    int GetSolutionCount() {
	return m_solution_count;
   }

    int GetAttemptCount() {
	return m_attempt_count;
   }

private:

    void SearchAlt(int col){

	if (col == m_size) {
	    m_solution_count++;
	    return;
	}

	for (int row = 0; row < m_size; row++) {
	    m_attempt_count++;
	    if (m_row_inuse[row] == 0 && IsDiagValid(col, row)) {
		m_queen[col] = row;
		m_row_inuse[row] = 1;
		SetDiags(col, 1);
		SearchAlt(col+1);
		SetDiags(col, 0);
		m_row_inuse[row] = 0;
		m_queen[col] = -1;
	   }
	}

   }

    void Search(int col) {
	if (col == m_size) {
	    m_solution_count++;
	    return;
	}

	for (int i = col; i < m_size; i++) {
	    if (SwapQueenIfDiagValid(col, i)) {
		Search(col+1);
		UnSwapQueen(col, i);
	   };
	}
   }

    void SwapQueenBasic(int i, int j) {
	    int hold = m_queen[i];
	    m_queen[i] = m_queen[j];
	    m_queen[j] = hold;
   }

    void SetDiags(int col, int val) {
	assert(m_diag_rise[m_queen[col] + col]!= val);
	       m_diag_rise[m_queen[col] + col] =  val;
	assert(m_diag_fall[m_queen[col] - col + m_size]!= val);
	       m_diag_fall[m_queen[col] - col + m_size] =  val;
   }

    bool IsDiagValid(int col, int row) {
	return (m_diag_rise[row + col] == 0 &&
		m_diag_fall[row - col + m_size] == 0);
   }

    bool SwapQueenIfDiagValid(int i, int j) {
	m_attempt_count++;
	if (IsDiagValid(i, m_queen[j])) {
	    SwapQueenBasic(i, j);
	    SetDiags(i, 1);
            return true;
	}
        return false;
   }

    void UnSwapQueen(int i, int j) {
	SetDiags(i, 0);
	SwapQueenBasic(i, j);
   }

};

void
do_work(bool is_alt)
{
    int size = 8;

    EightQueens puzzle(size, is_alt);
    int soln = puzzle.GetSolutionCount();
    int attempt = puzzle.GetAttemptCount();
    assert(size!= 8 || soln == 92);
    const char* style = is_alt ? "cartesian": "permutation";
    printf("EightQueens[%d] has %d solutions found in %5d attempts using %s search. \n", size, soln, attempt, style);
}

int main()
{
    printf("We should have 92 solutions for 8x8. \n");
    do_work(0);
    do_work(1);
}

انیمیشن روش بازگشتی

 

مسئله چند وزیر

 

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

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

شبه کد پیاده‌سازی الگوریتم مونت کارلو برای الگوریتم عقبگرد مسئله n وزیر

  int ostimate _ n_ queens (int n)
   {
          index i , j , col [1..n];
          int m , mprod , numnodes ;
          set _of_ index  prom _children;
          i = ۰;
          numnodes =۱ ;
          m = ۱;

        mprod  = ۱ ;
        while  (m!= 0 && i!= n) {
        mprod = mprod * m ;
        numnodes  = numnodes + mprod * n;
        i ++;
        m = ۰ ;
        prom_childern  = Ø;
        for (j = 1 ; j ≤ n ; j++;) {
                col [i]  = j ;
                if (promising(i)) {

         m++;
         prom_children = prom _ children U {i};
                }
            }
             if (m!= ۰)  {
                 j = random selection from prom _childeren;
                 col [i];
             }
        }
         return numnodes;
     }

روش مکاشفه‌ای

برای حل این مسئله که دارای ۹۲ جواب است، باید تکنیکهایی جهت کاهش حالات، روش Brute Force یا امتحان تک تک جواب‌ها انجام شود. تعداد همه حالاتی که می‌تواند در روش Brute Force چک شود برابر ۱۶٬۷۷۷٬۲۱۶ یا هشت به توان هشت است! یکی از روش‌های حل این مسئله برای n>=4 یا n=1 استفاده از روش مکاشفه‌ای ( heuristic)است:

1- عدد n را بر عدد ۱۲ تقسیم کن و باقی‌مانده را یادداشت کن

۲- به ترتیب اعداد زوج ۲ تا n را در لیستی بنویس

۳- اگر باقی‌مانده ۳ یا ۹ بود، عدد ۲ را به انتهای لیست انتقال بده.

۴- به لیست اعداد فرد ۱ تا n را به ترتیب اضافه کن، اما اگر باقی‌مانده ۸ بود اعداد را دو به دو باهم عوض کند (مثلاً ۱و۳و۵و۷و۹ تبدیل به ۳و۱و۷و۵و۹ میشه)

۵- اگر باقی‌مانده ۲ بود جای ۱ و۳ را با هم عوض کن و ۵ را به انتهای لیست ببر.

۶- اگر باقی‌مانده ۳ یا ۹ بود، اعداد ۱ و ۳ را به انتهای لیست ببر.

۷- حال با استفاده از لیست بدست آمده وزیرها در صفحه شطرنج چیده می‌شوند، به‌طوری‌که جای وزیر ستون اول، اولین عدد لیست، جای وزیر ستون دوم، دومین عدد لیست و…

این الگوریتم یک راه حل برای حل این مسئله‌است، برای بدست آوردن همه حالات از روش‌های دیگری می‌توان استفاده کرد. روش حل مسئله ۱۲ راه حل یکتا دارد که با در نظرگیری تقارن و چرخش به ۹۲ حالت قابل تبدیل است.

روش‌های جستجوی محلی

می‌توان به مسئله ۸ وزیر به عنوان یک مسئله بهینه‌سازی نیز نگریست که در آن هدف بهینه کردن تعداد گاردهای جفت وزیرها می‌باشد.

به عنوان مثال فرض کنید در صفحه شطرنج معمولی، ۸ وزیر را به دو روش زیر قرار دهیم:

مسئله ی چند وزیرمسئله ی چند وزیر

در روش چینش سمت چپ ۳ وزیر و در روش چینش سمت راست ۴ وزیر همدیگر را گارد می‌دهند. بنابراین روش چینش قبلی بهینه تر از روش چینش فعلی است. در واقع می‌توان مسئله بهینه‌سازی را به صورت زیر تعریف کرد. فرض کنید S مجموعه همه جواب‌های ممکن برای مسئله باشد. در صورتی S* می‌تواند جواب مسئله باشد که به ازای همه جواب‌های موجود در S، S* بهینه تر از دیگر جواب‌ها باشد. در مسئله ۸ وزیر دیدیم که جوابی بهینه‌است که تعداد گاردهای جفت وزیر آن کمتر باشد.

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

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

۱) دو وزیر به تصادف انتخاب شده و جای آن دو باهم عوض گردد.

۲) یکی از وزیرها به تصادف انتخاب شده و شماره سطر آن به تصادف تغییر کند.

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

مسئله چند وزیر قسمت 1
مسئله چند وزیر قسمت 2
مسئله چند وزیر قسمت 3
مسئله چند وزیر قسمت 4

تاريخچه

الگوريتم SVM اوليه در ۱۹۶۳ توسط Vladimir Vapnik ابداع شد و در سال ۱۹۹۵ توسطVapnik و Corinna Cortes براي حالت غيرخطي تعميم داده شد.

ماشين بردار پشتيباني (Support vector machines) يکي از روش‌هاي يادگيري بانظارت(Supervised learning) است که از آن براي طبقه‌بندي و رگرسيون استفاده مي‌کنند.

اين روش از جمله روش‌هاي نسبتاً جديدي است که در سال‌هاي اخير کارايي خوبي نسبت به روش‌هاي قديمي‌تر براي طبقه‌بندي از جمله شبکه‌هاي عصبي پرسپترون نشان داده است. مبناي کاري دسته‌بنديکنندة SVM دسته‌بندي خطي داده‌ها است و در تقسيم خطي داده‌ها سعي مي‌کنيم خطي را انتخاب کنيم که حاشيه اطمينان بيشتري داشته باشد. حل معادلة پيدا کردن خط بهينه براي داده‌ها به وسيله روش‌هايQP (Quadratic Programming) که روش‌هاي شناخته شده‌اي در حل مسائل محدوديت‌دار هستند صورت مي‌گيرد.

SVM از يک تکنيک که kernel trick ناميده مي شود، براي تبديل داده هاي شما استفاده مي کند و سپس بر اساس اين تبديل، مرز بهينه بين خروجي هاي ممکن را پيدا مي کند. به عبارت ساده تبديلات بسيار پيچيده را انجام مي دهد، سپس مشخص مي کند چگونه داده هايتان را بر اساس برچسب ها يا خروجي هايي که تعريف کرده ايد، جدا کنيد.

يکي از روش هايي که در حال حاضر به صورت گسترده براي مسئله دسته بندي (Classification) مورد استفاده قرار مي گيرد، روش ماشين بردار پشتيبان (SVM) است. شايد به گونه اي بتوان محبوبيت کنوني روش ماشين بردار پشتيبان را با محبوبيت شبکه هاي عصبي در دهه گذشته مقايسه کرد. علت اين قضيه نيز قابليت استفاده اين روش در حل مسائل گوناگون مي باشد، در حاليکه روش هايي مانند درخت تصميم گيري را نمي توان به راحتي در مسائل مختلف به کار برد.

کاربردهاي SVM

الگوريتم  SVM، جز الگوريتم هاي تشخيص الگو دسته بندي مي شود. از الگوريتم SVM، در هر جايي که نياز به تشخيص الگو يا دسته بندي اشيا در کلاس هاي خاص باشد مي توان استفاده کرد. در ادامه به کاربرد هاي اين الگوريتم به صورت موردي اشاره مي شود:

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

ايده اصلي SVM

l      با فرض اينکه دسته ها بصورت خطي جداپذير باشند، ابرصفحه هائي با حداکثر حاشيه(maximum margin)  را بدست مي آورد که دسته ها را جدا کنند.

l      در مسايلي که داده ها بصورت خطي جداپذير نباشند، داده ها به فضاي با ابعاد بيشتر نگاشت پيدا مي کنند تا بتوان آنها را در اين فضاي جديد بصورت خطي جدا نمود.

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

مسئله جداسازي خطي: Linear Discrimination

اگر دو دسته وجود داشته باشند که بصورت خطي از هم جداپذير باشند، بهترين جدا کننده اين دو دسته چيست؟

الگوريتم هاي مختلفي از جمله  پرسپترون ميتوانند اين جداسازي را انجام دهند.

آيا همه اين الگوريتمها بخوبي از عهده اين کار بر مي آيند؟

 

آشنايي با مفاهيم ابتدايي

خط يا ابر صفحه جدا کننده:

هدف: پيدا کردن بهترين خط ( ابر صفحه) که دو دسته را از هم جدا کند. در حالت دو بعدي معادله اين خط بصورت زير است:

در حالت n  بعدي خواهيم داشت:

حداکثر حاشيه (maximum margin)

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

چرا حداکثر حاشيه؟

¢     به نظر مي رسد که مطمئن ترين راه باشد.

¢     تئوري هائي برمبناي VC dimension وجود دارد که مفيد بودن آنرا اثبات مي کند.

¢     بطور تجربي اين روش خيلي خوب جواب داده است.

¢     دليل اينکه SVM روي بزرگ­ترين مرز براي hyperplane پافشاري مي­کند اين­ست که قضيه قابليت عموميت بخشيدن به الگوريتم را بهتر تامين مي­کند. اين نه تنها به کارايي طبقه­بندي و دقت  آن روي داده­هاي آزمايشي کمک مي­کند، فضا را نيز براي طبقه­بندي بهتر داده­هاي آتي مهيا مي­کند.

بردار پشتيبان

نزديکترين داده هاي آموزشي به ابر صفحه هاي جدا کننده بردار پشتيبان ناميده مي شوند.

ماشين بردار پشتيبان خطي

ماشين بردار پشتيبان يک روش يادگيري نسبتا جديد است که اغلب براي کلاسبندي باينري مورد استفاده واقع مي شود. فرض کنيد L مشاهده داريم که هر مشاهده مشتمل بر زوج هاي است که در آن . بردار ورودي و  يک مقدار دو وضعيتي (1- يا 1+) است. ايده ي ماشين بردار پشتيبان مي کوشد، ابرصفحاتي در فضا رسم کند که عمل تمايز نمونه هاي کلاس هاي مختلف داده ها را بطور بهينه انجام دهد. مي توان يک ابرصفحه را از طريق رابطه زير نشان داد:

براي يک بردار خطي b با وزن w ، حاشيه جداسازي عبارتست از فاصله ي بين ابرصفحه تعريف شده توسط رابطه ي فوق و نزديکترين ويژگي به آن. هدف ماشين بردار پشتيبان يافتن ابرصفحه اي ست که بيشترين حاشيه ي جداسازي را داشته باشد. مهمترين وظيفه SVM ، يافتن پارامترهاي w0 و b0 بر اساس بردارهاي آموزشي داده شده، براي اين ابرصفحه بهينه است. براي يک بردار ويژگي X، فاصله تا ابرصفحه بهينه به صورت زير است:

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

براي حل اين مساله، تابع لاگرانژ زير را تشکيل داده و حل مي کنيم:

لاگرانژين L بايد نسبت به متغيرهاي اوليه  bو w مينيموم و نسبت به متغيرهاي دوگان ماکزيموم شود. با مساوي صفر قراردادن مشتق L نسبت به b،w:

به معادلات زير خواهيم رسيد:

مجموعه جواب، بسطي از نمونه هاي آموزشي است که مقدار  متناظر با آن ها، يک مقدار غير صفر است. اين نمونه هاي آموزشي خاص به بردارهاي پشتيبان مشهورند. بردارهاي پشتيبان روي مرز حاشيه قرار دارند. مابقي نمونه هاي آموزشي در اين قسمت نقشي ندارند.

تمايز نمونه هاي دو کلاس با ابرصفحه ي بهينه

با قرار دادن 7 و 8 در  به مساله دوگان ولف زير خواهيم رسيد:

حل اين مساله دوگان ضرايب لاگرانژ را به ما مي دهد. تابع ابرصفحه متمايز کننده را مي توان به صورت زير نوشت:

ماشين بردار پشتيبان براي بردارهاي ورودي جدايي ناپذير:

اغلب در عمل، يافتن يک ابرصفحه متمايز کننده به راحتي امکان پذير نيست. زيرا مثلا يک نويز قوي مي تواند باعث ايجاد رويهم افتادگي کلاس ها شود. در اين حالت از متغير هايي به نام متغيرهاي کمبود(Slack Variables) استفاده مي کنيم. به گونه اي که شرايط زير برقرار باشند:

حال يک تعميم خوب براي ابرصفحه ي متمايز کننده، با کنترل ظرفيت کلاسبند (از طريق ) و همچنين تعداد خطاهاي مرحله آموزش بدست مي آيد. مساله بهينه سازي به صورت زير تعريف خواهد شد:

مساله دوگان به فرم زير خواهد بود:

ماشين بردار پشتيبان غيرخطي:

ابرصفحه جداکننده بهينه اولين بار توسط Vapnik در سال ۱۹۶۳ ارائه شد که يک دسته کننده خطي بود. در سال ۱۹۹۲ ،Bernhard Boser ،  Isabelle GuyonوVapnik راهي را براي ايجاد دسته بند غيرخطي، با استفاده قرار دادن هسته براي پيدا کردن ابرصفحه با بيشتر حاشيه، پيشنهاد دادند. الگوريتم نتيجه شده ظاهرا مشابه است، به جز آنکه تمام ضرب هاي نقطه اي با يک تابع هسته غيرخطي جايگزين شده اند. اين اجازه مي دهد، الگوريتم، براي ابرصفحه با بيشترين حاشيه در يک فضاي ويژگيِ تغييرشکل داده، مناسب باشد. ممکن است، تغييرشکل غيرخطي باشد و فضاي تغيير يافته، داراي ابعاد بالاتري باشد. به هر حال دسته کننده، يک ابرصفحه در فضاي ويژگي با ابعاد بالا است، که ممکن است در فضاي ورودي نيز غيرخطي باشد.

در حالت غيرخطي، مي توان با اعمال پيش پردازش داده ها، مساله را به فضايي برد که در آن جا با يک ابرصفحه ساده قابل حل باشد. براي اين منظور يک نگاشت  تعريف مي کنيم که بردار ورودي d بعدي x را به بردار d’ بعدي z تبديل مي کند.

بايد به گونه اي انتخاب شود که بردارهاي فضاي ويژگي جديد جدايي پذير باشند. در حالت کلي مي توان گفت که اگر  بردارهاي ورودي را به فضايي ببرد که تعداد ابعاد آن به اندازه کافي بزرگ باشد (

منبع


منابع

1.https://fa.wikipedia.org

2.http://www.bigdata.ir

3.www.barjoueian.com

4.http://fumblog.um.ac.ir

ماشین بردار پشتیبان (svm) قسمت 1
ماشین بردار پشتیبان (svm) قسمت 2
ماشین بردار پشتیبان (svm) قسمت 3

ماشین بردار پشتیبانی

ماشین بردار پشتیبان (Support vector machines – SVMs) یکی از روش‌های یادگیری بانظارت است که از آن برای طبقه‌بندی و رگرسیون استفاده می‌کنند.

این روش از جملهٔ روش‌های نسبتاً جدیدی است که در سال‌های اخیر کارایی خوبی نسبت به روش‌های قدیمی‌تر برای طبقه‌بندی از جمله شبکه‌های عصبی پرسپترون نشان داده است. مبنای کاریدسته‌بندی کنندۀ SVM دسته‌بندی خطی داده‌ها است و در تقسیم خطی داده‌ها سعی می‌کنیم خطی را انتخاب کنیم که حاشیه اطمینان بیشتری داشته باشد. حل معادله پیدا کردن خط بهینه برای داده‌ها به وسیله روش‌های QP که روش‌های شناخته شده‌ای در حل مسائل محدودیت‌دار هستند صورت می‌گیرد. قبل از تقسیمِ خطی برای اینکه ماشین بتواند داده‌های با پیچیدگی بالا را دسته‌بندی کند داده‌ها را به وسیلهٔ تابعِ phi به فضای با ابعاد خیلی بالاتر می‌بریم. برای اینکه بتوانیم مسئله ابعاد خیلی بالا را با استفاده از این روش‌ها حل کنیم از قضیه دوگانی لاگرانژ برای تبدیلِ مسئلهٔ مینیمم‌سازی مورد نظر به فرم دوگانی آن که در آن به جای تابع پیچیدهٔ phi که ما را به فضایی با ابعاد بالا می‌برد، تابعِ ساده‌تری به نامِ تابع هسته که ضرب برداری تابع phi است ظاهر می‌شود استفاده می‌کنیم. از توابع هسته مختلفی از جمله هسته‌های نمایی، چندجمله‌ای و سیگموید می‌توان استفاده نمود.

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

کاربردهای SVM

الگوریتم SVM، جز الگوریتم‌های تشخیص الگو دسته بندی می‌شود.از الگوریتم SVM، در هر جایی که نیاز به تشخیص الگو یا دسته بندی اشیا در کلاس‌های خاص باشد می‌توان استفاده کرد.در ادامه به کاربردهای این الگوریتم به صورت موردی اشاره می‌شود:

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

تاریخچه

الگوریتم SVM اولیه در ۱۹۶۳ توسط Vladimir Vapnik ابداع شدو در سال ۱۹۹۵ توسط Vapnik و Corinna Cortes برای حالت غیرخطی تعمیم داده شد.

خلاصه استفاده عملی از SVM

ماتریس الگو را آماده می کنیم. تابع کرنلی را برای استفاده انتخاب می کنیم. پارامتر تابع کرنل و مقدار C را انتخاب می کنیم. برای محاسبه ی مقادیرα_i الگوریتم آموزشی را با استفاده از حل‌کننده‌های QP اجرا می کنیم. داده‌های جدید با استفاده از مقادیرα_i و بردارهای پشتیبان می‌توانند دسته بندی شوند.

مزایا و معایب SVM

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

ماشین بردار پشتیبان خطی

شکل 1

ما مجموعه داده‌های آزمایش {\displaystyle {\mathcal {D}}} شامل n عضو(نقطه)را در اختیار داریم که به صورت زیر تعریف می‌شود:

{\displaystyle {\mathcal {D}}=\left\{(\mathbf {x} _{i},y_{i})\mid \mathbf {x} _{i}\in \mathbb {R} ^{p},\,y_{i}\in \{-1,1\}\right\}_{i=1}^{n}}

جایی که مقدار y برابر ۱ یا -۱ و هر {\displaystyle \mathbf {x} _{i}} یک بردار حقیقی p-بعدی است. هدف پیدا کردن ابرصفحه جداکننده با بیشترین فاصله از نقاط حاشیه‌ای است که نقاط با {\displaystyle y_{i}=1} را از نقاط با {\displaystyle y_{i}=-1} جدا کند. هر ابر صفحه می‌تواند به صورت مجموعه‌ای از نقاط {\mathbf {x}} که شرط زیر را ارضا می‌کند نوشت:

{\displaystyle \mathbf {w} \cdot \mathbf {x} -b=0,\,} جایی که . علامت ضرب است. {\displaystyle {\mathbf {w} }} بردار نرمال است، که به ابرصفحه عمود است. ما می خواهیم {\displaystyle {\mathbf {w} }} و {\displaystyle {\mathbf {b} }} را طوری انتخاب کنیم که بیشترین فاصله بین ابر صفحه‌های موازی که داده‌ها را از هم جدا می‌کنند، ایجاد شود. این ابرصفحه‌ها با استفاده از رابطه زیر توصیف می‌شوند.
{\displaystyle \mathbf {w} \cdot \mathbf {x} -b=1\,}

و

شکل 2
{\displaystyle \mathbf {w} \cdot \mathbf {x} -b=-1.\,}
اگر داده‌های آموزشی جدایی پذیر خطی باشند، ما می‌توانیم دو ابر صفحه در حاشیه نقاط به‌طوری‌که هیچ نقطه مشترکی نداشته باشند، در نظر بگیریم و سپس سعی کنیم، فاصله آن‌ها را، ماکسیمم کنیم. با استفاده از هندسه، فاصله این دو صفحه {\displaystyle {\tfrac {2}{\|\mathbf {w} \|}}} است. بنابراین ما باید {\displaystyle \|\mathbf {w} \|} را مینیمم کنیم. برای اینکه از ورود نقاط به حاشیه جلوگیری کنیم، شرایط زیر را اضافه می کنیم: برای هر i
of the first class {\displaystyle \mathbf {w} \cdot \mathbf {x} _{i}-b\geq 1\qquad {\text{ for }}\mathbf {x} _{i}}

یا

of the second class {\displaystyle \mathbf {w} \cdot \mathbf {x} _{i}-b\leq -1\qquad {\text{ for }}\mathbf {x} _{i}}

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

{\displaystyle y_{i}(\mathbf {w} \cdot \mathbf {x} _{i}-b)\geq 1,\quad {\text{ for all }}1\leq i\leq n.\qquad \qquad (1)}

با کنار هم قرار دادن این دو یک مسئله بهینه‌سازی به دست می‌آید:

Minimize (in {\displaystyle {\mathbf {w} ,b}})

{\displaystyle \|\mathbf {w} \|}

subject to (for any {\displaystyle i=1,\dots ,n})

{\displaystyle y_{i}(\mathbf {w} \cdot \mathbf {x_{i}} -b)\geq 1.\,}

فرم اولیه

مسئله بهینه‌سازی مشاهده شده در قسمت قبل، مسئله سختی، برای حل کردن است، زیرا به||w|| وابسته است (نرم w ) . خوشبختانه می‌توانیم، بدون تغییر در مسئله||w|| را با{\displaystyle {\tfrac {1}{2}}\|\mathbf {w} \|^{2}}جانشین کنیم( عبارت ½ برای آسودگی در محاسبات ریاضی آورده شده). این یک مسئله بهینه سازی (OP)برنامه‌ریزی غیرخطی(QP) است. به‌طور واضح تر :

Minimize (in {\displaystyle {\mathbf {w} ,b}}) c

{\displaystyle {\frac {1}{2}}\|\mathbf {w} \|^{2}}

subject to (for any {\displaystyle i=1,\dots ,n})

{\displaystyle y_{i}(\mathbf {w} \cdot \mathbf {x_{i}} -b)\geq 1.}

می توان عبارت قبل را با استفاده از ضرایب نا منفی لاگرانژ به صورت زیر نوشت که در آن ضرایب لاگرانژ هستند {\displaystyle \alpha _{i}}:

{\displaystyle \min _{\mathbf {w} ,b,{\boldsymbol {\alpha }}}\{{\frac {1}{2}}\|\mathbf {w} \|^{2}-\sum _{i=1}^{n}{\alpha _{i}[y_{i}(\mathbf {w} \cdot \mathbf {x_{i}} -b)-1]}\}}

اما فرمول فوق اشتباه است . فرض کنید ما بتوانیم خانواده‌ای از ابرصفحات که نقاط را تقسیم می‌کنند پیدا کنیم . پس همه {\displaystyle y_{i}(\mathbf {w} \cdot \mathbf {x_{i}} -b)-1\geq 0} . بنا بر این ما می‌توانیم مینیمم را با فرستادن همه {\displaystyle \alpha _{i}} به{\displaystyle +\infty } پیدا کنیم. با این حال شرط پیش گفته می‌تواند به صورت پایین بیان شود:

{\displaystyle \min _{\mathbf {w} ,b}\max _{\boldsymbol {\alpha }}\{{\frac {1}{2}}\|\mathbf {w} \|^{2}-\sum _{i=1}^{n}{\alpha _{i}[y_{i}(\mathbf {w} \cdot \mathbf {x_{i}} -b)-1]}\}}

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

{\displaystyle \mathbf {w} =\sum _{i=1}^{n}{\alpha _{i}y_{i}\mathbf {x_{i}} }}

تنها چند{\displaystyle \alpha _{i}} بزرگتر از صفر خواهد بود.{\displaystyle \mathbf {x_{i}} } متناظر، دقیقاً همان بردار پشتیبان خواهد بود و به شرط را ارضا خواهد کرد. از این می‌توان نتیجه گرفت که بردارهای پشتیبان شرط زیر را نیز ارضا می‌کنند: {\displaystyle y_{i}(\mathbf {w} \cdot \mathbf {x_{i}} -b)=1} که اجازه می دهد مفدار b تعریف شود. در عمل الگوریتم مقاوم تر خواهد بود اگر از تمام {\displaystyle N_{SV}} بردار پشتیبان میانگین گرفته شود:

{\displaystyle b={\frac {1}{N_{SV}}}\sum _{i=1}^{N_{SV}}{(\mathbf {w} \cdot \mathbf {x_{i}} -y_{i})}}

فرم دوگان

استفاده از این واقعیت که {\displaystyle \|\mathbf {w} \|^{2}=w\cdot w} و جانشینی {\displaystyle \mathbf {w} =\sum _{i=1}^{n}{\alpha _{i}y_{i}\mathbf {x_{i}} }} می‌توان نشان داد که دوگان SVM به مسئله بهینه‌سازی زیر ساده می‌شود:

Maximize (in {\displaystyle \alpha _{i}} )

{\displaystyle {\tilde {L}}(\mathbf {\alpha } )=\sum _{i=1}^{n}\alpha _{i}-{\frac {1}{2}}\sum _{i,j}\alpha _{i}\alpha _{j}y_{i}y_{j}\mathbf {x} _{i}^{T}\mathbf {x} _{j}=\sum _{i=1}^{n}\alpha _{i}-{\frac {1}{2}}\sum _{i,j}\alpha _{i}\alpha _{j}y_{i}y_{j}k(\mathbf {x} _{i},\mathbf {x} _{j})}

subject to (for any}{\displaystyle i=1,\dots ,n})

{\displaystyle \alpha _{i}\geq 0,\,}

and to the constraint from the minimization in {\displaystyle b}

{\displaystyle \sum _{i=1}^{n}\alpha _{i}y_{i}=0.}

در اینجا هسته به صورت {\displaystyle k(\mathbf {x} _{i},\mathbf {x} _{j})=\mathbf {x} _{i}\cdot \mathbf {x} _{j}} تعریف می‌شود. عبارت \alpha  تشکیل یک دوگان برای بردار وزن‌ها مجموعه آموزشی می دهد:

{\displaystyle \mathbf {w} =\sum _{i}\alpha _{i}y_{i}\mathbf {x} _{i}.}

ماشین بردار پشتیبان چند کلاسی

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

ماشین‌های بردار پشتیبان غیرخطی

شکل 3

ابرصفحه جداکننده بهینه اولین بار توسط Vapnik در سال ۱۹۶۳ ارائه شد که یک دسته‌کننده خطی بود. در سال ۱۹۹۲ ،Bernhard Boser ، Isabelle GuyonوVapnik راهی را برای ایجاد دسته بند غیرخطی، با استفاده قرار دادن هسته برای پیدا کردن ابرصفحه با بیشتر حاشیه، پیشنهاد دادند. الگوریتم نتیجه شده ظاهراً مشابه است، به جز آنکه تمام ضرب‌های نقطه‌ای با یک تابع هسته غیرخطی جایگزین شداند. این اجازه می‌دهد، الگوریتم، برای ابرصفحه با بیشترین حاشیه در یک فضای ویژگی تغییرشکل داده، مناسب باشد. ممکن است، تغییرشکل غیرخطی باشد و فضای تغییر یافته، دارای ابعاد بالاتری باشد. به هر حال دسته‌کننده، یک ابرصفحه در فضای ویژگی با ابعاد بالا است، که ممکن است در فضای ورودی نیز غیرخطی باشد.

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

  • چندجمله‌ای (همگن): {\displaystyle k(\mathbf {x_{i}} ,\mathbf {x_{j}} )=(\mathbf {x_{i}} \cdot \mathbf {x_{j}} )^{d}}
  • چندجمله‌ای (ناهمگن): {\displaystyle k(\mathbf {x_{i}} ,\mathbf {x_{j}} )=(\mathbf {x_{i}} \cdot \mathbf {x_{j}} +1)^{d}}
  • گوسیین Radial Basis Function:  {\displaystyle k(\mathbf {x_{i}} ,\mathbf {x_{j}} )=\exp(-\gamma \|\mathbf {x_{i}} -\mathbf {x_{j}} \|^{2})}، for {\displaystyle \gamma >0.} Sometimes parametrized using {\displaystyle \gamma =1/{2\sigma ^{2}}}
  • تانژانت هذلولی: {\displaystyle k(\mathbf {x_{i}} ,\mathbf {x_{j}} )=\tanh(\kappa \mathbf {x_{i}} \cdot \mathbf {x_{j}} +c)}، for some (not every) {\displaystyle \kappa >0} and {\displaystyle c<0}

هسته با انتقال {\displaystyle \varphi (\mathbf {x_{i}} )} با تساوی {\displaystyle k(\mathbf {x_{i}} ,\mathbf {x_{j}} )=\varphi (\mathbf {x_{i}} )\cdot \varphi (\mathbf {x_{j}} )} در ارتباط است. همچنین مقدار wدر فضای انتقال یافته برابر{\displaystyle \textstyle \mathbf {w} =\sum _{i}\alpha _{i}y_{i}\varphi (\mathbf {x} _{i}).} است. ضرب نقطه‌ای با w می‌تواند توسط هسته محاسبه شود یعنی {\displaystyle \textstyle \mathbf {w} \cdot \varphi (\mathbf {x} )=\sum _{i}\alpha _{i}y_{i}k(\mathbf {x} _{i},\mathbf {x} )}. به هر حال در حالت عادی w’ وجود ندارد، به‌طوری‌که {\displaystyle \mathbf {w} \cdot \varphi (\mathbf {x} )=k(\mathbf {w'} ,\mathbf {x} ).}

 

منبع

 

 

ماشین بردار پشتیبان (svm) قسمت 1
ماشین بردار پشتیبان (svm) قسمت 2
ماشین بردار پشتیبان (svm) قسمت 3

مقدمه

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

تاریخچه منطق فازی

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

منطق فازی چیست؟

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

واژگانی از قبیل { کم ، زیاد، خیلی کم ، خیلی زیاد، قدری و … } این واژه ها واژه های زبان شناختی نام دارند، یعنی با مقادیر ریاضی نمی توان مقدار مشخصی را به آنها ربط داد.
اینجاست که منطق فازی وارد عمل می شود و با استفاده از مجموعه های فازی،برای متغیر میزان بارش باران، مجموعه ای را به شکل زیر صورت می دهد:
میزان بارش باران= { کم ، زیاد، خیلی کم ، خیلی زیاد، قدری و … }

باید پذیرفت قواعدی نظیر این زیبا هستند، زیرا این ها قواعد بشری هستند. آنها نمونه خوبی هستند برای اینکه ما چطورفکر می کنیم و چطور نتیجه می گیریم. بیایید به سراغ نمونه دیگری برویم:
ازشما سوال می شود” آیا شغلتان را دوست دارید؟” پاسخ شما لزوماً بله یا خیر نمی باشد؛ بنابراین مجموعه جواب به صورت زیر خواهد بود:
جواب= { تا حدی، نه خیلی، تقریباً، اصلاً ، کم و بیش، خیلی و… }
به هر یک از این مقادیر،مقداری به عنوان ” درجه عضویت” نسبت داده می شود، بدین معنا که مقدار مربوطه تا چه حد در این مجموعه عضو می باشد.

مجموعه های فازی و زبان طبیعی

لازم به ذکر است، در مجموعه های قطعی، یک شیء قطعاً ، یا عضو مجموعه، است یا نیست:

اگر xعضو مجموعه A باشد
اگر X عضو مجموعه A نباشد

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

که در این حالت تابع عضویت، یک عدد حقیقی است:

بدین معنا که شیء مورد نظر به طور نسبی در یک مجموعه وجود دارد. همچنین مقدار جزئی تابع عضویت، درجه عضویت نامیده می شود.
از سوی دیگر در نظر داشته باشید: مفاهیم ومجموعه های فازی ،عموماً در زبان طبیعی بکار می روند نظیر:
” جان قد بلند است.”
” هوا گرم است.”

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

پایین

قدری

تقریباً

متوسط

کم

بین

بالا

زیاد

به مقدار زیاد

خیلی

بیشتر

اصلاً

بیشترین

کم و بیش

در حدود

دراین تئوری، عضویت اعضای مجموعه از طریق تابع U ( X) مشخص می شود که X نمایانگر یک عضو مشخص و U تابعی فازی است که درجه عضویت X در مجموعه مربوطه را تعیین می کند و مقدار آن بین صفر و یک است:

همچنین به عنوان یک مجموعه متناهی از عناصر، برای عبارت بلند قد می توان زیر مجموعه فازی ذیل را تعریف کرد:
{ ( 8،1 )، ( 1، 705 )، ( 1، 7 )، (875،65 )، ( 05، 6 )،( 0125، 55 )،(0 ، 5 )}= بلند قد
در این مجموعه فازی، علامت “، ” درجه عضویت را از اعداد مربوطه به قد افراد جدا می سازد.

متغیرهای زبانی

” متغیرهای زبانی، متغیرهایی هستند که مقادیرشان اعداد نیستند،بلکه لغات یا جملات یک زبان طبیعی یا ساختگی هستند.”
به طورکلی، متغیرها به 2 دسته تقسیم می شوند:
زبانی: مانند کلمات و عبارات مربوطه به یک زبان طبیعی می باشد.
عددی: که متغیرها دارای مقادیرعددی هستند.

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

درعین حال متغیرهای زبانی می توانند از الحاق تشکیل شوند که هر کدام از uiها، عباتی تجزیه ناپذیر است. مانند ” تا حدی سرد “، که در مجموع به 4 دسته زیر تقسیم می شود:
عبارات اصلی: که به عنوان برچسب هایی برای مجموعه های فازی در نظر گرفته می شوند و مانند ” سرد” در عبارات بالا، یا عباراتی از قبیل : کوتاه، بلند و … که هر کدام تابع عضویت مخصوص خود را دارند.

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

متغیر زبانی

متغیر قابل پذیرش

ارتفاع قد
تعداد
مراحل زندگی
رنگ
روشنی
دسر

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

اما چگونه منطق فازی به کار گرفته می شود؟

منطق فازی معمولاً از قوانین ” اگر و آنگاه” ( IF/THEN) استفاده می کند، اما این بررسی ،به صورت بررسی مقادیر خشک منطق کلاسیک نمی باشد، بلکه این بررسی توسط متغیرهای معنایی صورت می گیرد.این قوانین معمولاً به شکل زیر بیان می شود:
اگر( متغیر ) ( حالت ) است، آنگاه ( عملکرد ).

برای مثال ،یک دستگاه تنظیم کننده درجه حرارت را در نظر بگیرید که قانون منطق فازی را می توان اینگونه برایش تعریف کرد:
● اگر ( درجه حرارات) ( بسیار سرد) است، آنگاه ( فن را متوقف کن ).
● اگر درجه حرارت سرد است، آنگاه سرعت فن را کم کن.
● اگر درجه حرارت متعادل است، آنگاه همین سرعت فن را حفظ کن.
به طورکلی روش کار منطق فازی را می توان به شکل زیر نشان داد:

منطق کلاسیک

کاربرد هوش مصنوعی

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

قاعده Soft Computing

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

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

زمینه های کاربرد منطق فازی درهوش مصنوعی

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

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

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

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

نتیجه

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

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

منبع

مقالات پردازش تصویر عبارت اند از:

Basics of digital image processing

مفاهیم اولیه پردازش تصویر

فایل PDF – در 57 صفحه – نویسنده : ناشناس

Basics of digital image processing

پسوردفایل : behsanandish.com


Digital Image Processing Laboratory Manual

کتابچه راهنمای آزمایشگاه پردازش تصویر دیجیتال

فایل PDF – در 19 صفحه – نویسنده :  Bhaskar Mondal

Digital Image Processing laboratory manual

پسوردفایل : behsanandish.com


Fundamentals of Digital Image Processing

اصول پردازش تصویر دیجیتال

فایل PDF – در 8 صفحه – نویسنده : ناشناس

Fundamentals of Digital Image Processing

پسوردفایل : behsanandish.com


Fundamentals of Image Processing

اصول پردازش تصویر

فایل PDF – در 112 صفحه – نویسنده : Ian T. Young , Jan J. Gerbrands  , Lucas J. van Vliet

Image Processing Fundamentals–An Overview

پسوردفایل : behsanandish.com


Image Processing Manual

دستورالعمل پردازش تصویر

فایل PDF – در 164 صفحه – تهیه کننده : انستیتو ملی اسناد آمریکا

Image processing manual

پسوردفایل : behsanandish.com


Image Processing Tutorial-Basic Concepts 

آموزش پردازش تصویر-مفاهیم پایه

فایل PDF – در 55 صفحه – تهیه کننده : شرکت CCDWare Publishing

Image Processing Tutorial

پسوردفایل : behsanandish.com


Intel® Image Processing Library-Reference Manual

کتابخانه پردازش تصویر اینتل-دستورالعمل مرجع

فایل PDF – در 319 صفحه – نویسنده :  شرکت Intel

Intel Image Processing Library-reference manual

پسوردفایل : behsanandish.com


آنالیز و پردازش تصویر

فایل Word – در 15 صفحه – نویسنده :  ناشناس

pardazesh tasvir

پسوردفایل : behsanandish.com


مفاهیم پایه پردازش تصویر-محیط های چند رسانه ای

فایل PDF – در 109 صفحه – نویسنده :  احمد محمودی ازناوه (دانشگاه شهید بهشتی)

مفاهیم_پایه_پردازش_تصویر_دانشگاه

پسوردفایل : behsanandish.com

بینایی کامپیوتری (Computer vision) چیست؟

 بینایی کامپیوتری (Computer vision) یا بینایی ماشین (Machine vision) یکی از شاخه‌های علوم کامپیوتر است که شامل روش‌های مربوط به دستیابی تصاویر، پردازش، آنالیز و درک محتوای آن‌ها است. معمولاً این پردازش‌ها تصاویر تولید شده در دنیای واقعی را به عنوان ورودی دریافت و داده‌هایی عددی یا سمبلیک را به عنوان خروجی تولید می‌کنند، مانند در شکل‌هایی از تصمیم‌گیری. یکی رویه‌های توسعهٔ این شاخه بر اساس شبیه‌سازی توانایی بینایی انسان در رایانه می باشدنرم.

تصویر هنری از مریخ نورد NASA بر روی سطح سیاره مریخ. مثالی از خودروهای زمینی بدون سرنشین

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

کاوش در داده‌ها

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

وظایف اصلی در بینایی رایانه‌ای(بینایی کامپیوتری)

تشخیص شیء

تشخیص حضور و/یا حالت شیء در یک تصویر. به عنوان مثال:

  • جستجو برای تصاویر دیجیتال بر اساس محتوای آن‌ها (بازیابی محتوامحور تصاویر).
  • شناسایی صورت انسان‌ها و موقعیت آن‌ها در عکس‌ها.
  • تخمین حالت سه‌بعدی انسان‌ها و اندام‌هایشان.

پیگیری

پیگیری اشیاء شناخته شده در میان تعدادی تصویر پشت سر هم. به عنوان مثال:

  • پیگیری یک شخص هنگامی که در یک مرکز خرید راه می‌رود.

تفسیر منظره

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

  • ساختن یک مدل از ناحیهٔ پیرامونی به کمک تصاویری که از دوربین نصب شده بر روی یک ربات گرفته می‌شوند.

خودمکان‌یابی

مشحص کردن مکان و حرکت خود دوربین به عنوان عضو بینایی رایانه. به‌عنوان مثال:

  • مسیریابی یک ربات درون یک موزه.

سامانه‌های بینایی رایانه‌ای یا بینایی کامپیوتری

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

تصویربرداری

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

پیش‌پردازش

در گام پیش‌پردازش، تصویر در معرض اَعمال «سطح پایین» قرار می‌گیرد. هدف این گام کاهش نوفه (کاهش نویز – جدا کردن سیگنال از نویز) و کم‌کردن مقدار کلی داده‌ها است. این کار نوعاً با به‌کارگیری روش‌های گوناگون پردازش تصویر(دیجیتال) انجام می‌شود. مانند:

  • زیرنمونه‌گیری تصویر.
  • اعمال فیلترهای دیجیتال.
    • پیچشها.
    • همبستگیها یا فیلترهای خطی لغزش‌نابسته.
      • عملگر سوبل.
      • محاسبهٔ گرادیان x و y(و احتمالاً گرادیان زمانی).
  • تقطیع تصویر.
    • آستانه‌گیری پیکسلی.
  • انجام یک ویژه‌تبدیل بر تصویر.
    • تبدیل فوریه.
  • انجام تخمین حرکت برای ناحیه‌های محلی تصویرکه به نام تخمین شارش نوری هم شناخته می‌شود.
  • تخمین ناهمسانی در تصاویر برجسته‌بینی.
  • تحلیل چنددقتی.

استخراج ویژگی

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

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

ثبت

هدف گام ثبت برقراری تناظر میان ویژگی‌های مجموعه برداشت شده و ویژگی‌های اجسام شناخته‌شده در یک پایگاه داده‌های مدل و/یا ویژگی‌های تصویر قبلی است. در گام ثبت باید به یکفرضیه نهایی رسید. چند روش این کار عبارت‌اند از:

  • تخمین کمترین مربعات.
  • تبدیل هاگ در انواع گوناگون.
  • درهم‌سازی هندسی.
  • پالودن ذره‌ای.

بینایی و تفسیر تصاویر در انسان‌ها

lز آنجایی که هدف نهایی computer vision ساخت مفسر قدرتمند اجسام 3D , رنگ‌ها و عمق تصاویر هست. دانستن این موضوع که چگونه مغز موجودات، بینایی و دیدن را تفسیر می‌کند و اینکه چند درصد نورون‌های کل مغز در گیر این پروسه هستند نسبتاً اهمیت پیدا می‌کند. مقاله زیر می‌تواند یک نگاه کلی از این روند پیچیده بدهد.

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

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

جریان dorsal بصری (سبز رنگ در تصویر) و جریان ventral(بنفش) در تصویر مشخص شده. قسمت‌های بسیار زیادی ازcerebral cortex در پروسه بینایی نقش دارند.

سلولهای مخروطی (Cone cells) در یک منطقه مرکزی شبکیه متمرکز به نام گودال متمرکز شده‌اند که فرورفتگی (یا fovea) هم نام دارد. آنها مسئول وظایف سنگین و دقیقی مثل خواندن هستند. سلول‌های Cone بسته به اینکه به نور آبی، قرمز، سبز چگونه واکنش می‌دهند به سه دسته تقسیم می‌شوند، و در مجموع این سه نوع از Cone ما را قادر به درک رنگ‌ها می‌کنند. سیگنال‌ها از سلول‌های گیرنده نوری (photoreceptor cells) از طریق شبکه ای از interneuronsها در لایه دوم شبکیه چشم به سلول‌های ganglion در لایه سوم منتقل می‌شوند. نورون‌های موجود در این دو لایه از شبکیه زمینه پذیرای پیچیده ای که آنها را قادر به تشخیص تضادهای تغییراتی در یک تصویر می‌کند را ارائه می‌دهند: این تغییرات ممکن است لبه‌ها یا سایه‌ها را نشان دهند. سلول‌های Ganglion این اطلاعات را به همراه دیگر اطلاعات در مورد رنگ جمع‌آوری می‌کنند و خروجی خود را به مغز از طریق عصب بینایی ارسال می‌کنند. عصب یا Nerve بینایی در درجه اول اطلاعات را از طریق thalamus به قشاء مغزی (cerebral cortex) ارسال می‌کند. پس از ارسال اطلاعات در قسمت cerebral cortex ادراک بصری انسان به وقوع می‌پیوندد. اما در عین حال این عصب (Nerve) حامل اطلاعات مورد نیاز برای مکانیک دید نیز هست که به دو قسمت از ساقه مغز (brainstem) این اطلاعات را منتقل می‌کند. اولین قسمت از brainstem گروهی از سلول‌های هسته هستند که pretectum نام دارند که کنترل غیرارادی اندازه مردمک در پاسخ به شدت نور را بر عهده دارند. اطلاعات مربوط به اهداف متحرک و اطلاعات ساکن اسکن شده توسط چشم نیز به قسمت دوم در brainstem منتقل می‌شود، یک هسته که با نام superior colliculus شناخته می‌شود مسئول حرکات چشم در پرش‌های کوتاه هست. بخش دیگر از این دو قسمت saccades هست که به مغز اجازه درک یک اسکن هموار را با کمک چسباندن یک سری از تصاویر نسبتاً ثابت می‌دهد. Saccadic eye movement مشکل تاری شدید- که می‌تواند برای تصویر پیش بیاید – را حل می‌کند. چشم می‌تواند به صورت یکنواخت در سراسر چشم‌انداز بصری حرکت کند؛ saccadesها در بعضی از وضعیت‌ها تجربه بصری را ممکن و آسان می‌کنند مانند مشاهده چشم فرد دیگری برای شما، در حالی که آن فرد در تلاش برای نگاه کردن سرتاسر اتاق هست.

محل دقیق قسمت thalamus(تالاموس) در عمق مغز در تصویر سه بعدی

بسیاری از تصاویر از شبکیه چشم (retina) از طریق عصب بینایی به بخشی از thalamus که به نام (lateral geniculate nucleus) شناخته شده است و در اختصار (LGN) هم کفته می‌شود منتقل می‌شوند، thalamus در عمق مرکز مغز قرار گرفته. LGN ورودی شبکیه (retinal) را به جریان‌های موازی ای مورد جداسازی قرار می‌دهد که یکی حاوی رنگ و ساختار ثابت و دیگری حاوی تضادها (contrast) و حرکات هست. سلول‌هایی که پردازش رنگ و ساختار را انجام می‌دهند چهار لایه بالایی از شش لایه LGN را تشکیل می‌دهند. این چهار لایه به علت کوچکی سلول‌ها، parvocellular نامیده می‌شوند. سلول‌هایی که پردازش حرکات و تضادهای تصویر را انجام می‌دهند دو لایه پایینی LGN رو تشکیل می‌دهند و به علت بزرگی سلول‌های این قسمت، لایه magnocellular نامیده می‌شوند.

سلول‌های لایه‌های magnocellular و parvocellular همه راه‌ها را به بخش‌های پشت مغز و به سمت قشر بینایی اولیه (Visual cortex _ V1) طرح‌ریزی می‌کنند. سلول‌ها در V1 در چندین مسیر مرتب شده‌اند که این مسئله اجازه می‌دهد سیستم بینایی محل اشیاء را در فضا محاسبه کند. در ابتدا سلول‌های V1 به صورت retinotopically یا موضعی سازمان یافته‌اند، که به معنای این است که نقطه به نقطه روی نقشه بین شبکیه و قشر بینایی اولیه وجود دارد و مناطق همجوار در شبکیه چشم با مناطق همجوار در V1 مطابقت دارد؛ که این به V1 اجازه می‌دهد که موقعیت اشیا را در دو بعد از جهان بصری که افقی و عمودی (مختصات (x , y)) تعیین کند. بعد سوم و عمق نیز با مقایسه سیگنال‌های دو چشم توسط V1 نقشه‌برداری و تعیین می‌شود. این سیگنال‌ها در پشته سلولها که ستون ocular dominance نامیده می‌شوند پردازش می‌شوند، که یک الگوی شطرنجی اتصالات متناوب بین سمت چپ و چشم راست است. اختلافی جزئی در موقعیت یک شی نسبت به هر چشم وجود دارد که اجازه می‌دهد تا عمق توسط مثلث محاسبه شود.

در نهایت، V1 به ستون‌های جهت گیری سازمان یافته است، پشته از سلول‌ها که به شدت توسط خطوط یک جهت گیری داده شده، فعال می‌شوند. ستون‌های جهت امکان تشخیص لبه‌های اشیاء در جهان بصری را برایV1 را فراهم می‌سازند، و به طوری که آنها کار پیچیده ای از تشخیص بصری را شروع می‌کنند. سازمان ستونی از قشر بینایی اولیه برای اولین بار توسط David Hubel و Torsten Wiesel توصیف شده است، که در نتیجه بخاطر این موضوع جایزه نوبل ۱۹۸۱ را دریافت کرده‌اند.

جالب توجه است که این الگوی شطرنجی، سازمان ستونی V1 در هنگام تولد بسیار مبهم است. قشر بینایی یک نوزاد تازه متولد شده رشد بیش از حد (hypertrophy) , یا اتصالات اتفاقی دارد که باید به دقت و بر اساس تجربه بصری در بلند مدت هرس شوند، و در نهایت به ستون‌های جداگانه تعریف شده تبدیل شوند- این در واقع یک کاهش در تعداد اتصالات و نه افزایش اتصالات خواهد بود -که در نهایت توانایی نوزاد برای دیدن جزئیات ریز و به رسمیت شناختن اشکال و الگوها را بهبود می‌بخشد.

primary visual cortex (V1)

این نوع از پالایش وابسته، به فعالیت به V1 محدود نمی‌شود و در بسیاری از مناطق سراسر قشر مغز (cerebral cortex) رخ می‌دهد. در همان زمان که توانایی تبعیض خطوط و لبه در قشر بینایی اولیه بهبود می‌یابد، سلول‌ها را در قشر بینایی ثانویه (secondary visual cortex V2) , توانایی خود را برای تفسیر رنگ پالایش می‌کنند. V2 تا حد زیادی مسئول پدیده ثبات رنگ است؛ و این حقیقت را توضیح می‌دهد که واقعیت یک گل سرخ تحت تأثیر بسیاری از رنگ‌های مختلف نور توسط ما هنوز هم به رنگ سرخ به نظر می‌رسد. این طور گمان می‌شود که ثبات رنگ وقتی رخ می‌دهد که V2 می‌تواند یک شیء و نور محیط را مقایسه کند و می‌تواند برآورد رنگ روشنایی را کاهش دهد. با اینحال این پروسه با توجه به اینکه بیننده انتظار دارد که شیء بخصوص به چه رنگی داشته باشد، به شدت تحت تأثیر قرار می‌گیرد.

در حقیقت، تقریباً تمام ویژگی‌های مرتبه بالاتر از بینایی و منظره توسط انتظارات بر اساس تجربه گذشته تحت تأثیر قرار می‌گیرد. این ویژگی به گسترش رنگ و درک فرم موجود در V3 و V4، به چهره و تشخیص شیء در لوب temporal (جایی که تصویر ذهنی سه بعدی از آنچه که می‌بینیم در نهایت تشکیل می‌شود) و به حرکت و آگاهی از فضای موجود در لوب parietal می‌انجامد. هرچند چنین روش و تأثیراتی گاهی اجازه می‌دهد مغز تحت تأثیر تصورات نادرست فریب بخورد، برای مثال در مواقع خطای دید در برخی از تصاویر، ولی این روش پردازش به ما توانایی دیدن و پاسخ سریع به جهان بصری را داده است. از تشخیص روشنایی و تاریکی در شبکیه چشم (retina) تا خطوط انتزاعی در V1 تا تفسیر اشیا و روابط فضاییشان در ناحیه‌های بصری بالاتر، هر وظیفه ای در ادراک بصری کارایی و قدرت سیستم بینایی انسان را نشان می‌دهد.

موارد حال حاضر استفاده از تکنولوژی computer vision

  • کاربردهای غیرنظامی
    1. سرچ پیدا کردن تصاویر مشابه در سرویس‌های Google یا Bing
    2. سرویس‌های شناختی Microsoft
      1. پیدا کردن افراد یکسان در تصاویر حتی در صورتی که آنها تغییر فیافه داده باشند
      2. سرویس تشخیص احساسات لحظه ای افراد مبتنی بر تصاویر
      3. سرویس تشخیص سن افراد و جنسیت و . . . در تصاویر
      4. سرویس PhotoDNA
      5. سرویس قدرتمند تبدیل نوشته‌های موجود در تصاویر به متن
      6. تشخیص چهره در ویدئو به صورت real time
      7. تبدیل گفتار به متن
      8. تشخیص لحن گفتار بر پایه متن
      9. سرویس پیدا کردن مفاهیم بر پایه محتویات متنی
      10. سرویس‌های تشخیص زبان‌های طبیعی
      11. سرویس توصیف تصاویر
      12. ربات‌های چت پیشرفته (از جمله این ربات‌ها می شه به Tay در twitter اشاره کرد)
      13. و سرویس‌های دیگر . . . .
    3. سرویس‌های شناختی IBM
      1. تشخیص احساسات بر پایه تصاویر
      2. سرویس اپن سورس توصیف تصاویر با node.js (سورس code)
      3. توصیف محتواهای متنی
      4. سرویس شناختی آنالیز شبکه‌های اجتماعی
      5. ربات‌های خودکار پاسخ دهنده هوشمند به کاربران
      6. تشخیص احساسات بر پایهٔ محتوای متنی
      7. سرویس گراف‌های شناختی از داده‌های تاریک
      8. کسب و کارهای شناختی
      9. تشخیص real time ایتم‌های مختلف با تراشه SyNAPSE
      10. و سرویس‌های دیگر . . . .
    4. خودروهای خودران Google و بقیه شرکت‌ها
    5. استفاده برای تشخیص چهره درگرفتن عکس در تلفن‌های همراه همچنین استفاده در سرویس شبکه اجتماعی فیسبوک جهت نوشتن نام‌ها بر روی تصاویر
    6. استفاده در فروشگاه‌ها برای دنبال کردن سلایق بازدید کننده گان
    7. استفاده در تشخیص پلاک خودرو
    8. درمان بیماری‌ها و تومورها و سرطان با Nanobots های که انرژی خود را از برخورد اتفاقی با سلول‌ها به دست می آورند

 

ناو ACTUV

تصویری از رونمایی کشتی جنگی بدون سرنشین ضد زیر دریایی با قابلیت ردیابی ممتد یا به اختصار (ACTUV)

  • کاربردهای نظامی
    • تشخیص و شناسایی چهره افراد در فرودگاها و مراکز حساس دیگر
    • وسایل حرکتی بدون سرنشین _ مستقل (Uncrewed vehicle)
      1. خودروهای زمینی بدون سرنشین نظامی چند منظوره با قابلیت‌های استفاده موتوریزه و انتقال نیروها و تجهیزات . . . (Unmanned ground vehicle)
      2. زیردریایی بدون سرنشین: زیردریایی شرکت بوئینگ (Boeing submarine) که قابلیت ماه‌ها ماندن در زیر دریا و بررسی و ارسال اطلاعات به طور کاملاً مستقل را قادر می‌باشند
      3. ناوهای بدون سرنشین: ناوهای ضد زیردریایی ACTUV ساخت DARPA (سازمان پروژه‌های تحقیقاتی پیشرفتهٔ دفاعی)
      4. هواپیماهای بدون سرنشین و پهپادها با کنترل مستقل (Unmanned aerial vehicle)
      5. سیستم دفاع موشکی هوش مصنوعی (Artificially Intelligent Missile Defense System)
      6. فضاپیمای بدون سرنشین (Unmanned spacecraft)
      7. ربات‌های Humanoid (پروژه Atlas robot)
      8. Nanobots

منبع

مطالب مرتبط :

تفاوت بینایی ماشین و بینایی کامپیوتر

آشنایی با ماشین بینایی

آشنایی با بینایی ماشین و بینایی رایانه ای

تشخیص اثر انگشت

 اثر انگشت در انسان، اثری از سایش شیارهای پایانهٔ انگشت است. با توجه به اینکه هیچ دو انسانی اثر انگشت مشابه ندارند، می‌توان از این اثر برای شناسایی افراد بهره‌برد.

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

 

دستگاه اثر انگشت

امروزه در بسیاری از کشورها برای خواندن و ثبت اثر انگشت، از دستگاه‌های پیشرفته استفاده می‌شود.

این روش در تعیین هویت از دقت ۱۰۰٪ برخوردار بوده و حتی در دوقلوهای یکسان (تک‌تخمکی) نیز اثر انگشت متفاوت است. به‌گونه‌ای که امکان شباهت اثر انگشت دو نفر انسان، یک شصت و چهار میلیاردم می‌باشد.

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

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

تاریخچه

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

۸۵۰ سال قبل از میلاد یک بازرگان عرب با نام ابو زید حسن شاهد رسمیت یافتن اسناد وامها در چین بوده‌است. تا سال ۷۰۲ قبل از میلاد، ژاپنی‌ها نیز از روش چینی‌ها برای رسمیت بخشیدن به اسناد استفاده می‌کردند. گرچه احتمالاً مردم در دوران باستان نمییدانستند که اثر انگشت می‌تواند افراد را به صورت منحصربه‌فرد شناسایی نماید، اما در زمان حمورابی، کسانی که دستگیر می‌شدند انگشت نگاری می‌شدند. رشید الدین همدانی، طبیب برجسته ایرانی در کتاب جامع التواریخ به رسم چینی‌ها در شناسایی افراد از طریق اثر انگشت اشاره کرده و توضیح داده‌است که «شواهد و تجربیات نشان می‌دهد که هیچ دو نفری اثر انگشت کاملاً یکسان ندارند». در این زمان در ایران نیز از اثر انگشت شصت برای مهر نمودن اسناد استفاده می‌کردند. همچنین بر دیوار مقبره‌های باستانی مصر و یونان نیز آثار انگشت یافت شده‌است.

 

اثر انگشت سبابه

 

در اوایل قرن بیستم استفاده از تکنیکهای تشخیص اثر انگشت برای تحقیقات جنایی در غرب با الهام از تمدن شرق متداول گشت. در آن زمان لازم بود تصویر هر ۱۰ انگشت با جوهر خاصی ثبت گردد. اما در اواخر دهه ۱۹۶۰، ابداع سیستمهای ثبت اثر انگشت زنده (به صورت الکترونیکی) Live-Scan Systems انقلابی در صنعت تشخیص اثر انگشت به وجود آورد. به سرعت پایگاه‌های داده از اثر انگشت افراد ایجاد شد و محققان هر روز فناوری تازه‌ای معرفی می‌کردند که با دقت و سرعت بیشتری فرد مور نظر را از بین انبوهی از افراد شناسایی می‌کرد.

با پیشرفت تکنولوژی، تبهکاران نیز دست به کار شده و روشهای پیچیده‌ای از تقلب Fake Fingerprint را ابداع نمودند. ساده‌ترین روش تقلب، ثبت اثر انگشت فرد بر روی کاغذ (۲ بعدی) است. فناوری با ترکیب روشهای امنیتی (الکترواستاتیک، ترمودینامیک و…) مختلف به جنگ تقلب در سیستمهای امنیتی رفته‌است.

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

تحقیقات علمی

زمانی که برای اولین بار انگشت‌نگاری برای تشخیص هویت به کار رفت، بعضی از وکلای دادگستری ایراد گرفتند که ممکن است آثار انگشتانی پیدا کرد که یکسان باشند ولی فرانسیس گالتون،انسان‌شناس معروف انگلیسی در جست و جوهای خود راجع به اثرانگشت و موضوع وراثتی بودن آن به این نتیجه رسید که نقوش سرانگشت توارثی نیست و در کتاب آثار انگشتان از طریق علوم ریاضی ثابت کرد که ممکن نیست بتوانید اثرات انگشت مشابه بیابید. پس از گالتون نیز دانشمند دیگری به نام فورژ و در سال ۱۷۹۲ مطالعه‌ای را روی خانواده‌هایی که ازدواج فامیلی در آنها رسم بود، آغاز کرد و تا سه نسل پیش رفت اما در نهایت به این نتیجه رسید که اثرات انگشت مشابه وجود ندارد.

کاربرد

گذرنامه بیومتریک اروپایی، اثرانگشت دیجیتال دارنده، ثبت‌شده در جلد پاسپورت.

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

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

منبع


كلمه بيومتريك از كلمه يونانی bios به معنای زندگی و كلمه metrikos به معنای اندازه گيری تشكيل شده است. همه ما می دانيم كه ما برای شناسايی همديگر از يك سری ويژگی هايی استفاده می كنيم كه برای هر شخص به طور انحصاری است و از شخصی به شخص ديگر فرق می كند كه از آن جمله می توان به صورت و گفتار و طرز راه رفتن اشاره كرد. امروزه در زمينه های فراوانی ما به وسايلی نياز داريم كه هويت اشخاص را شناسایی كند و بر اساس ويژگيهای بدن اشخاص آن ها را بازشناسی كند و اين زمينه هر روز بيشتر و بيشتر رشد پيدا می كند و علاقه مندان فراوانی را پيدا كرده است. علاوه بر اين ها امروزه password و ID كارتهايی كه بكار برده می شوند دسترسی را محدود می كنند، اما اين روشها به راحتی می توانند شكسته شوند و لذا غير قابل اطمينان هستند. بيومتری را نمی توان امانت داد يا گرفت، نمی توان خريد يا فراموش كرد و جعل آن هم عملا غير ممكن است.

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

يك سيستم بيومتری ساده دارای چهار بخش اساسی است :

1) بلوك سنسور: كه كار دريافت اطلاعات بيومتری را بر عهده دارد.
2) بلوك استخراج ويژگيها: كه اطلاعات گرفته شده را می گيرد و بردار ويژگی هاي آن را استخراج می كند.
3) بلوك مقايسه: كه كار مقايسه بردار حاصل شده با قالبها را بر عهده دارد.
4) بلوك تصميم: كه اين قسمت هويت را شنااسايي مي كند يا هويت را قبول كرده يا رد مي كند.

هر خصيصه اي از انسان مي تواند به عنوان يك ويژگي در بيو متري بكار برده شود به شرطي كه شروط زير ر ا بر آورده كند :
1) عمومي بودن : هر شخصي آن خصيصه را داشته باشد.
2) متفاوت بودن : در اشخاص ، متفاوت باشد و دو تا شبيه هم نباشد.
3) دوام داشتن : در يك بازه زماني ثابت باشد.
4) قابل بدست آوردن باشد.
در كاربردهاي زندگي روزمره سه فاكتور ديگر نيز بايد رعايت شود: كارايي (دقت، سرعت)، دسترسي (براي كاربران بي ضرر باشد) امنيت بالا.
در اين مقاله ما به معرفي تعدادي از عواملي كه دربيو متري مورد استفاده قرار مي گيرند مي پردازيم.

باز شناسي هويت از طريق اثر انگشت

اين روش قديمي ترين روش آزمايش تشخيص هويت از راه دور است. اگرچه قبلاً اثر انگشت تنها در زمينه جرم قابل بحث بود، تحقيقات در بسياري كشورها سطحي از پذيرش را نشان ميدهد كه به اين روش اجازه استفاده در برنامه هاي عمومي را مي دهد. سيستمها ميتوانند جزئياتي از اثر انگشت (نقاطي مانند تقاطعها يا كناره هاي برجستگيها) يا كل تصوير را بگيرند. الگوهاي مرجع كه براي حفظ اين جزئيات بكار ميرود در حدود 100 بايت هستند كه در مقايسه با تصوير كاملي كه از اثر انگشت با حجم 500 تا 1500 بايت ميباشد، بسيار كوچكتر هستند.

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

نكته قابل توجه ديگر در سيستم هاي توليد توليد شده با استفاده از فناوري بيومتريك (اثر انگشت) قابل ملاحظه است، استقبال رو به گسترش مردم از خريد اين محصولات است. به طور مثال، شركت لنوو (Lenovo) با فروش بيش از يك ميليون كامپيوترهاي كيفي بيومتريكي كه اثر انگشت فرد صاحب آن را اسكن مي كند، به يكي از بزرگترين فروشندگان كامپيوترهاي بيومتريكي در جهان تبديل شده است.
در اين بخش سعي بر آن شده است كه اصول كلي، موانع و محدوديت هاي سيستمهاي تشخيص اثر انگشت بررسي شوند.

اصول كلي در سيستمهاي تشخيص اثر انگشت:

همانگونه كه اشاره شد، اثر انگشت يكي از روشهاي مطمئن براي شناسايي افراد مي باشد و در زمينه هايي نظير رسيدگي به جرم، سيستم هاي كنترل حوادث، كنترل مرزهاي ملي و … به كار مي رود. دليل اصلي انتخاب اثر انگشت براي شناسايي افراد اين است كه اثر انگشت هر فرد منحصر به فرد بوده و بعضي از ويژگي هاي آن تا آخر عمر ثابت باقي مي ماند و از همين ويژگي ها در تطبيق اثر انگشت استفاده مي شود. براي تطبيق دستي اثر انگشت روشهاي استانداردي وجود دارد، اما روش دستي تطبيق اثر انگشت كاري مشكل و بسيار وقت گير بوده و كارايي لازم را ندارد.البته از آنجا كه بانكهاي اطلاعاتي داراي ميليونها اثر انگشت مي باشد، عملاً تطبيق دستي اثر انگشت امري محال مي شود.

به منظور اتوماتيك كردن تطبيق بايد روشي براي تصوير و يا كد كردن اثر انگشت تعريف گردد. اين بيان تصوير بايستي شرايط زير را داشته باشد:
1) توانايي تمايز هر اثر انگشت در سطوح مختلف رزولوشن،
2)  محاسبات ساده
3)  قابليت بكارگيري در الگوريتم هاي تطبيق اتوماتيك،
4)  پايداري و عدم تغيير با نويز و خرابي ها
5) كارا بودن و نشان دادن تصاوير به صورت فشرده

اگر تصوير به صورت خام ذخيره شود، حافظه زيادي مورد نياز است و سيستم كارايي لازم را نخواهد داشت. در روشهاي ساختاري ويژگي ها از تصوير استخراج و تصوير با اين ويژگي ها شناخته شده و همچنين با استفاده از همين ويژگيها عمل تطبيق صورت مي گيرد.

اثر انگشت از برآمدگي ها و فرو رفتگي اي فلو مانندي تشكيل شده است كه بسته به وضعيت قرار گرفتن آنها ويژگي هاي مختلفي به وجود مي آيد. تا كنون 18 ويژگي براي اثر انگشت شناخته شده است كه دو ويژگي مهم آن، انتهاي برآمدگي و دوشاخه شدن برآمدگي مي باشدكه اصطلاحاً به آنها مينوتيا مي گويند. در شكل زير اين دو ويژگي نشان داده شده است:

 

 

 

اطلاعات مينوتيا در مولفه هاي x , y و زاويه برآمدگي ها آنها قرار دارد. ساختار توپولوژيكي مينوتاي يك اثر انگشت منحصر به فرد بوده و با گذشت زمان تغيير نمي كند. در نتيجه مي توان تشخيص اثر انگشت را بر مبناي تطبيق ساختار توپولوژيكي مينوتيا استوار ساخت. در يك تصوير انگشت با كيفيت نسبتاً خوب در حدود 70 تا 80 مينوتا وجود دارد كه البته اين تعداد در تصويرهاي جزئي به حدود 20 تا 30 ويژگي كاهش مي يابد، اما باز هم بااين تعداد مي توان عمل تطبيق اثر انگشت را انجام داد.

اكثر سيستمهاي تشخيص اثر انگشت، ساختاري بر مبناي مينوتيا دارند. در اين سيستمها سه مرحله اساسي براي تشخيص وجود دارد كه عبارتند از:
1)  پيش پردازش
2) استخراج مينوتيا
3) تطبيق مينوتيا
مرحله اول براي افزايش كيفيت تصوير انجام مي گيرد، مرحله دوم براي استخراج ويژگي هاي تصوير و مرحله آخر براي مقايسه مورد استفاده قرار مي گيرد.

در مورد تطبيق، روشهاي گوناگوني وجود دارد كه از جمله مي توان به موارد ذيل اشاره كرد:
1)  تطبيق مجموعه نقاط
2) تطبيق گراف
3) همشكلي دو زير گراف
البته عمل تطبيق بنا به دلايل زير نياز به محاسبات پيچيده دارد:
1) معمولاً كيفيت اثر انگشت پايين است.
2) بانك اطلاعاتي اثر انگشت ها بزرگ است.
3) تصوير هايي كه به صورت ساختاري آسيب ديده اند، به الگوريتم هاي نيرومندي جهت تطبيق نياز دارند.

در سيستمهاي تشخيص اثر انگشت موجود دربازار كه از اين دو ويژگي (انتهاي برآمدگي و دوشاخه شدن برآمدگي) استفاده مي شود، به علت بزرگ بودن بانك اطلاعاتي و نويز دار بودن تصاوير، يك تطبيق يك به يك عملاً مشكل بوده و از اين رو يكسري از تصوير هاي تطبيق يافته تهيه و سپس تطبيق نهايي توسط افراد متخصص انجام مي گيرد.

  استخراج ساير ويژگي ها:

علاوه بر ويژگي هاي بيان شده، در بسياري از سيستمهاي تشخيص اثر انگشت، از ويژگي هاي سطح بالا نيز استفاده مي شود. اين امر باعث افزايش صحت عمل تطبيق مي گردد. يكي از اين ويژگي هاي مهم كلاس الگوي اثر انگشت مي باشد.

اثر انگشت به پنج كلاس اصلي تقسيم مي شود كه عبارت است از:
1) كمان
2) كمان مايل
3) حلقه چپ
4) حلقه راست
5) مارپيچ

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

 

 

 

کد کردن اطلاعات

در ادامه به بررسي مختصري از مراحل كد كردن اطلاعات اثر انگشت مي پردازيم:

  1)  نحوه به دست آمدن تصوير اثر انگشت:

1-1) كاغذ و مركب : در سالهاي گذشته بيشتر از روش كاغذ و مركب استفاده مي شد به اين ترتيب كه در ابتدا اثر انگشت فرد با استفاده از مركب بروي كاغذ ثبت و سپس تصوير اثر انگشت اسكن شده و فايل تصويري آن آماده مي شد، كه اين روش اكنون به علت مشكلات خاص خود و البته پيشرفت تكنولوژي كم كم منسوخ مي شود. معمولا چون كيفيت تصوير به دست آمده پايين است با
استفاده از تكنيك هاي پردازش تصوير اين نقيصه تا حدي مرتفع مي گردد.

       1-2)  روش اسكن مستقيم نوري:

روشهاي گوناگوني براي انجام اين نوع تصوير گيري وجود دارد. نمونه اي از آن در شكل زير آمده است:

 

 

1-3) با استفاده از سنسور LE

در اين روش از تكنولوژي نيمه هادي ها استفاده مي گردد. به اين ترتيب كه انگشت شخص بر روي سنسور LE كه از جنس نيمه هادي مي باشد، قرار گرفته و در نتيجه در محل هاي برآمدگي پوست انگشت كه در تماس با سنسور مي باشند، فوتون آزاد شده و به اين ترتيب اثر انگشت ثبت مي گردد.
امروزه اسكنر هايي كه براي ارتباط با كامپيوتر طراحي شده اند، به راحتي اطلاعات تصويراثر انگشت را تهيه و از طريق درگاه هاي كامپيوتر در اختيار نرم افزارهاي مربوطه قرار مي دهند.

نحوه استخراج ويژگي ها:

در اكثر سيستم ها از روشهاي ساختاري كه بر مبناي مينوتا هستند براي استخراج ويژگي ها استفاده مي شود. در اين سيستم ها در ابتداپيش پردازشهاي اوليه اي مانند يكنواخت كردن هيستوگرام، تشخيص برآمدگي ها و نازك كردن آنها روي تصوير اعمال ميگردد. سپس با استفاده از روشهاي زير به استخراج ويژگي ها و شناسايي اثر انگشت مبادرت مي ورزند:
1) روش فازي
2) روش شبكه هاي عصبي
3) ساختن گراف مربوطه به هر تصوير با استفاده از ميدان جهت دار و الگوريتم راتا
پياده سازي اين روشها يا با استفاده از كامپيوتر انجام گرفته و يا از مدارات مجتمعي كه به همين منظور ساخته شده است، انجام مي گيرد.

منبع