<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DU8DQ307cCp7ImA9WxNVEk4.&quot;"><id>tag:blogger.com,1999:blog-21714815</id><updated>2009-10-22T21:57:52.308+03:00</updated><title>vs.blog  :)</title><subtitle type="html">sunar!</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://volkansalma.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://volkansalma.blogspot.com/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><author><name>Volkan SALMA</name><uri>http://www.blogger.com/profile/02180507354820111978</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feeds.feedburner.com/VolkanSalma" type="application/atom+xml" /><feedburner:emailServiceId>VolkanSalma</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;DU8DQ306cSp7ImA9WxNVEk4.&quot;"><id>tag:blogger.com,1999:blog-21714815.post-3083362434852055254</id><published>2009-10-22T21:16:00.023+03:00</published><updated>2009-10-22T21:57:52.319+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-22T21:57:52.319+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programlama" /><category scheme="http://www.blogger.com/atom/ns#" term="Optimizasyon" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>Zeki Optimizasyon Teknikleri - 2 (Tavlama Benzetimi)</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/_SIJeFqYV1lQ/SuCq-wNW1QI/AAAAAAAABLM/3OyYy1fcHi0/s1600-h/multipeak3D.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_SIJeFqYV1lQ/SuCq-wNW1QI/AAAAAAAABLM/3OyYy1fcHi0/s200/multipeak3D.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Optimizasyon algoritmalarımızdan ikincisi Simulated Annealing olarak ta bilinen tavlama benzetimi algoritması. İsmi Metalurji biliminden gelmektedir. Metallerin tavlanması işleminden esinlenerek ortaya çıktığı için bu ismi almıştır. Genellikle ayrık optimizasyon problemleri için kullanılır.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Yöntemden kabaca bahsetmek için &amp;nbsp;&lt;a href="http://volkansalma.blogspot.com/2009/10/zeki-optimizasyon-teknikleri-1-hill.html"&gt;Hill Climbing&lt;/a&gt; yöntemimizi hatırlayalım. Hill-Climbing yönteminde ilk çözüm üretmiş, bir komşu üreteci fonksiyonu ile ilk çözümümüze komşu olan yeni bir çözüm kümesi üretmiştik.*Bu yeni kümeyi kendi içerisinde değerlendirip en iyi elemanını seçmiştik. Eğer bu seçtiğimiz en iyi eleman bizim eski çözümümüzden daha iyi bir çözümse yeni çözümümüz olarak bu değeri kabul etmiştik. Ayrıca Hill-Climbing yönteminin kolay uygulanmasının yanında &amp;nbsp;kötü bir özelliği olarak local çözümlere takılma olarak belirtmiştik.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; Algoritmanın bu lokal çözümlere takılmasının nedeni bulduğumuz bir eğim doğrultusunda ilerlememiz, bu yönde çözümleri kısıtlamamızdır. Lokal çözüme doğru hızla ilerlerken çözüm kümesinin diğer kısımlarını göz ardı ederiz. Eğer şans eseri ilk çözüm üretecimiz başlangıç çözümünü global çözüme yakın bir bölgede üretirse muhtemelen global çözüme ulaşırız. Bundandır ki, Hill Climbing algoritması başlangıç noktasına çok bağımlıdır demiştik.&lt;br /&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Hill Climbing algoritmamız üzerine bir takım modifikasyonlar yaptığımızı düşünelim. Yine ilk çözüm üretecimiz bir çözüm oluştursun, komşu çözüm üretecimiz komşu çözümler kümesini oluştursun, yine üretilen komşu çözüm kümesini kendi içerisinde değerlendirerek buradan en iyi çözümü seçelim. Klasik Hill Climbing algoritmamızda komşu çözüm kümesinden seçilen en iyi çözüm eğer eski çözümümüzden daha kötü ise bu değeri kullanmayıp elimizdeki çözümü saklıyorduk. Şimdi biraz daha insaflı davranıp komşu kümeden seçilen kötü çözüme bir şans verelim. Bu şans P olsun. Belkide verdiğimiz bu şans hatırına kötü çözüm bizi komşusu olan daha iyi çözümlere götürebilir. Hem böylece Hill-Climbing in local çözümlere takılıp kalma özelliğinden kurtulabiliriz. Eğer kötü çözümlere verdiğimiz seçilme şansı(olasılığı) P çalışma boyunca sabit kalırsa bu sefer tam güzel çözümlere doğru ilerlerken oradan oraya oradan oraya atlarız. Bu nedenle bu P olasılığının(iyi çözümü feda ederek yerine kötü çözümü kabul etme olasılığı) &amp;nbsp;dinamik olması gereklidir. Bu dinamiklik iterasyonla P nin azaltılması şeklinde(ve daha pek çok şekilde) yapılablir. Böylece problem çözümünün ilk kısımlarında çözüm bölgeleri arasında sıçrayış daha fazla olurken iterasyon sayımız artıp elde ettiğimiz çözümler &amp;nbsp;iyice güzelleştikçe 0 a yaklaşır. (Arama bölgemiz daralır.)&lt;br /&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;İşte yukarıda modifiye edilmiş bir Hill-Climbing algoritması gördük. Tavlama Benzetimi algoritmasının temel prensibi tam olarak budur. Kötü çözümü seçme olasılığı sistemli bir şekilde sıcaklıkla azaltılır. Sıcaklık iterasyona bağlı(genellikle düzgün veya logaritmik azalan) bir ifadedir.&lt;br /&gt;
&lt;/div&gt;
&lt;blockquote style="text-align: justify;"&gt;
Tavlama benzetimi algoritmasının temel amacı çözüm uzayında aranmadık bölge bırakmamaktır.&lt;br /&gt;
&lt;/blockquote&gt;
&lt;div style="text-align: justify;"&gt;
&amp;nbsp;Ayrıca Tavlama Benzetimi algoritmasında komşu çözüm kümesinin büyüklüğüde dinamik şekilde değiştirilebilir. (Probleme göre değişse de genel olarak çözümü çok fazla etkilememektedir) Bu şekilde bir kullanım benimsenirse yaygın kullanım küçük bir kümeyle başlayıp iterasyonla büyütmek şeklinde olur.&lt;br /&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Sıcaklığın azaltılması, olasılık değerinin sıcaklıkla azaltılması, çözüm kümesinin değiştirilmesi için pek çok yöntem kullanılır.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Bunlara girmeden basit bir problemi tavlama benzetimi algoritması ile çözelim. Aşağıda C++ kodu çözüm olarak string şeklinde "VOLKANSALMA@BLOGSPOT@COM" dizisini oluşturmaya çalışmaktadır.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; Örnek &lt;a href="http://www.generation5.org/content/2003/gahelloworld.asp"&gt;bu sitedeki&lt;/a&gt;&amp;nbsp;genetik algoritma ile Hello! World yazısını oluşturma probleminden esinlenilmiştir. Çözümün kalitesini değerlendirmek için gerekli fonksiyon (Fitness function) linki verilen siteden direk alınmıştır. .&lt;br /&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;span style="color: #80614d; font-family: Georgia, 'Times New Roman', Times, serif; font-size: 17px; font-style: italic; line-height: 27px;"&gt;Bu yazının hazırlanmasında hocam&amp;nbsp;&lt;a href="http://w3.gazi.edu.tr/~akcayol/" style="background: inherit; background: inherit; color: #79a325; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;span style="color: black; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;Doç.Dr. M.Ali Akcayol&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;' un Zeki Optimizasyon Teknikleri Dersi ders notları kullanılmıştır.&lt;/span&gt;&lt;br /&gt;
&lt;/blockquote&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="font-size: small;"&gt;*Hill-Climbing için yazmış olduğum C++ &amp;nbsp;kod örneğinde bir yanlışlık yaptığımın farkına vardım. Aslında çözüm kümesi kendi içerisinde değerlendirilip en iyi eleman seçilmesi gerekirken, ben ilk bulduğum iyi çözüm ile mevcut çözümü değiştirdim. Sonrada diğer iterasyona geçtim. Bu yanlışlık daha güzel çözümleri kullanamamıza neden oldu. Böyle bir hata çözüme yakınsama hızımızı düşürür.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
*Biçimlendirme güçlükleri nedeni ile kodda "&amp;lt;" ve "&amp;gt;" işaretleri yerine "-" işareti kullanılmıştır.&lt;br /&gt;
&lt;pre class="C++" name="code"&gt;//Simulated Annealing C++ Sample Code
//generates "VOLKANSALMA@BLOGSPOT@COM" string.
//inspired from http://www.generation5.org/content/2003/gahelloworld.asp
//A "Hello World!" Genetic Algorithm Example
//by volkan salma
//http://volkansalma.blogspot.com

#include -iostream-     // for cout etc.
#include -vector-     // for vector class
#include -string-     // for string class
#include -algorithm-    // for sort algorithm
#include -time.h-     // for random seed
#include -math.h-     // for abs()

#define SA_POPSIZE  50  // sa population size
#define SA_MAXITER  300  // maximum iterations
#define COEF            0.01
#define SA_TARGET  std::string("VOLKANSALMA@BLOGSPOT@COM")

using namespace std;

struct sa_struct
{
 string str;      // the string
 unsigned int fitness;   // its fitness
};

typedef vector-sa_struct- sa_vector;// for brevity

void generateNeighbourSolutionsToMySolution(sa_struct myCurrentSolution,sa_vector &amp;amp;neighbourSolutionSet);
void calcFitnessOfEveryElementInNeighbourSet(sa_vector &amp;amp;neighbourSolutionSet);
void init_population(sa_vector &amp;amp;population, sa_vector &amp;amp;buffer);
void calc_fitness(sa_vector &amp;amp;population);
bool fitness_sort(sa_struct x, sa_struct y);
void sort_by_fitness(sa_vector &amp;amp;population);
sa_struct generateFirstSolution();
sa_struct getNeighbourSolutionSetsBestElement(sa_vector &amp;amp;population);
void print_best(sa_vector &amp;amp;sav);


int main()
{
    srand(unsigned(time(NULL)));
    sa_struct myCurrentSolution;
    sa_struct buffer;
 vector -sa_struct- neighbourSolutionSet;
 double myRandomNumber;

 myCurrentSolution = generateFirstSolution();

 double Temperature = 100;
 double boltzman;


 for (int i=0; i - SA_MAXITER; i++)
 {
     generateNeighbourSolutionsToMySolution(myCurrentSolution,neighbourSolutionSet);

  calcFitnessOfEveryElementInNeighbourSet(neighbourSolutionSet);

  buffer = getNeighbourSolutionSetsBestElement(neighbourSolutionSet);

  if( buffer.fitness &amp;lt; myCurrentSolution.fitness) myCurrentSolution = buffer;

  else ///here is critical section. ;)
                     // we can change or not change the ourSolution with worst one.
  {
            myRandomNumber = rand()%10;
            myRandomNumber /= 10.0;   // i want to generate a rondom value in [0,1] range.
            boltzman = COEF * (1.0/ (exp(buffer.fitness - myCurrentSolution.fitness)/Temperature));

            if( boltzman &amp;gt; myRandomNumber)
            {
                cout--"Boltzman: "--boltzman--" &amp;gt; MyRandom: "--myRandomNumber--endl;
                myCurrentSolution = buffer;
                cout--"**********************************************************************"--endl;
            }
  }

  Temperature -= (100.0 / SA_MAXITER);

  cout --i--" My Solution: " -- myCurrentSolution.str -- " (" -- myCurrentSolution.fitness &amp;lt;&amp;lt; ") Temp:"--Temperature-- endl;

  if(myCurrentSolution.fitness == 0) break;

 }

    cout -- "My Best Solution Is: " -- myCurrentSolution.str -- " (" -- myCurrentSolution.fitness -- ")" -- endl;
    cin--boltzman;

    return 0;


}

void calcFitnessOfEveryElementInNeighbourSet(sa_vector &amp;amp;population)
{
 string target = SA_TARGET;
 int tsize = target.size();
 unsigned int fitness;

 for (int i=0; i - SA_POPSIZE; i++)
 {
  fitness = 0;
  for (int j=0; j-tsize; j++)
  {
   fitness += abs(int(population[i].str[j] - target[j]));
  }

  population[i].fitness = fitness;
 }
}

bool fitness_sort(sa_struct x, sa_struct y)
{
    return (x.fitness &amp;lt; y.fitness);
}

void sort_by_fitness(sa_vector &amp;amp;population)
{
    sort(population.begin(), population.end(), fitness_sort);
}

sa_struct getNeighbourSolutionSetsBestElement(sa_vector &amp;amp;population)
{
    sa_struct bestMemberOfSolutionSet;
    sort_by_fitness(population);
    bestMemberOfSolutionSet = population[0];

    return bestMemberOfSolutionSet;
}

sa_struct generateFirstSolution()
{
        int tsize = SA_TARGET.size();
        sa_struct result;

  result.fitness = 0;
  result.str.erase();

  for (int j=0; j-tsize; j++)
  {
   result.str += (rand() % 26) + 64;
  }

  string target = SA_TARGET;

  for (int j=0; j-tsize; j++)
  {
   result.fitness += abs(int(result.str[j] - target[j]));
  }


  return result;
}

void generateNeighbourSolutionsToMySolution(sa_struct myCurrentSolution,sa_vector &amp;amp;neighbourSolutionSet)
{
    int tsize = SA_TARGET.size();
    sa_struct buffer;
    neighbourSolutionSet.clear();

    for (int i=0; i-SA_POPSIZE; i++)
 {
     buffer.str = myCurrentSolution.str;
     buffer.str[i%tsize] = (rand() % 26) + 64;
     neighbourSolutionSet.push_back(buffer);
 }
}

&lt;/pre&gt;
Programın şu şekilde bir çıktısı oluyor: (Yıldızlarla gösterilen bölgelerde bulunan çözüm daha kötü olmasına rağmen olasılık değerlendirmesini geçmiş, çözüm olarak seçilmiştir. )&lt;br /&gt;
&lt;pre class="C++" name="code"&gt;0 My Solution: SGGYVNFHLND@HEL@RFOYMGEO (143) Temp:99.6667
1 My Solution: SGGYHNFHLND@HEL@RFOYMGEO (129) Temp:99.3333
2 My Solution: SGGYHNFHLND@HEL@RFOYAGEO (117) Temp:99
3 My Solution: SGGYHNRHLND@HEL@RFOYAGEO (105) Temp:98.6667
4 My Solution: SGGLHNRHLND@HEL@RFOYAGEO (92) Temp:98.3333
5 My Solution: SGGLHNRHLND@HEL@RFOYAGRO (85) Temp:98
6 My Solution: SGGLHNRHLND@HEL@RMOYAGRO (78) Temp:97.6667
7 My Solution: SGGLHNRHLND@HML@RMOYAGRO (72) Temp:97.3333
8 My Solution: SNGLHNRHLND@HML@RMOYAGRO (65) Temp:97
9 My Solution: SNGLBNRHLND@HML@RMOYAGRO (59) Temp:96.6667
10 My Solution: SNLLBNRHLND@HML@RMOYAGRO (54) Temp:96.3333
11 My Solution: SNLLBNRHLND@HMLERMOYAGRO (49) Temp:96
12 My Solution: VNLLBNRHLND@HMLERMOYAGRO (46) Temp:95.6667
13 My Solution: VNLLBNRHLND@BMLERMOYAGRO (40) Temp:95.3333
14 My Solution: VNLLBNRHLND@BMLERMORAGRO (37) Temp:95
15 My Solution: VNLLBNRHLND@BMLERMORAARO (35) Temp:94.6667
16 My Solution: VNLLBNRALND@BMLERMORAARO (28) Temp:94.3333
17 My Solution: VNLLBNRALNB@BMLERMORAARO (26) Temp:94
18 My Solution: VNLLANRALNB@BMLERMORAARO (25) Temp:93.6667
19 My Solution: VNLLANRALNA@BMLERMORAARO (24) Temp:93.3333
20 My Solution: VNLLANRALNA@BMOERMORAARO (21) Temp:93
21 My Solution: VNLLANRALNA@BMOERMORAAOO (18) Temp:92.6667
22 My Solution: VNLLANRALNA@BMOERMORAAOM (16) Temp:92.3333
23 My Solution: VNLLANRALNA@BMOERMORACOM (14) Temp:92
24 My Solution: VNLLANRALNA@BMOERMOTACOM (12) Temp:91.6667
25 My Solution: VNLLANRALNA@BMOESMOTACOM (11) Temp:91.3333
26 My Solution: VNLLANRALNA@BMOESPOTACOM (8) Temp:91
Boltzman: 0.91 &amp;gt; MyRandom: 0.8
**********************************************************************
27 My Solution: VNLLANRALNA@BMOESPOTACOM (8) Temp:90.6667
28 My Solution: VOLLANRALNA@BMOESPOTACOM (7) Temp:90.3333
29 My Solution: VOLLANRALNA@BMOGSPOTACOM (5) Temp:90
Boltzman: 0.9 &amp;gt; MyRandom: 0.7
**********************************************************************
30 My Solution: VOLLANRALNA@BMOGSPOTACOM (5) Temp:89.6667
Boltzman: 0.896667 &amp;gt; MyRandom: 0
**********************************************************************
31 My Solution: VOLLANRALNA@BKOGSPOTACOM (5) Temp:89.3333
Boltzman: 0.893333 &amp;gt; MyRandom: 0.5
**********************************************************************
32 My Solution: VOLLANRALNA@BKOGSPOTACOM (5) Temp:89
33 My Solution: VOLLANRALNA@BKOGSPOTACOM (5) Temp:88.6667
Boltzman: 0.326186 &amp;gt; MyRandom: 0.3
**********************************************************************
34 My Solution: VNLLANRALNA@BKOGSPOTACOM (6) Temp:88.3333
Boltzman: 0.883333 &amp;gt; MyRandom: 0.2
**********************************************************************
35 My Solution: VNLLANRALNA@BKOGSPOTACOM (6) Temp:88
36 My Solution: VNLKANRALNA@BKOGSPOTACOM (5) Temp:87.6667
Boltzman: 0.876667 &amp;gt; MyRandom: 0.6
**********************************************************************
37 My Solution: VNLKANRALNA@BKOGSPOTACOM (5) Temp:87.3333
38 My Solution: VOLKANRALNA@BKOGSPOTACOM (4) Temp:87
39 My Solution: VOLKANSALNA@BKOGSPOTACOM (3) Temp:86.6667
40 My Solution: VOLKANSALNA@BKOGSPOTACOM (3) Temp:86.3333
Boltzman: 0.863333 &amp;gt; MyRandom: 0.8
**********************************************************************
41 My Solution: VOLKANSALNA@BKOGSPOTACOM (3) Temp:86
42 My Solution: VOLKANSALMA@BKOGSPOTACOM (2) Temp:85.6667
Boltzman: 0.31515 &amp;gt; MyRandom: 0.3
**********************************************************************
43 My Solution: VPLKANSALMA@BKOGSPOTACOM (3) Temp:85.3333
Boltzman: 0.313924 &amp;gt; MyRandom: 0
**********************************************************************
44 My Solution: VQLKANSALMA@BKOGSPOTACOM (4) Temp:85
45 My Solution: VQLKANSALMA@BKOGSPOTACOM (4) Temp:84.6667
46 My Solution: VOLKANSALMA@BKOGSPOTACOM (2) Temp:84.3333
Boltzman: 0.843333 &amp;gt; MyRandom: 0.1
**********************************************************************
47 My Solution: VOLKANSALMA@BKOGSPOTACOM (2) Temp:84
Boltzman: 0.309019 &amp;gt; MyRandom: 0
**********************************************************************
48 My Solution: VPLKANSALMA@BKOGSPOTACOM (3) Temp:83.6667
49 My Solution: VOLKANSALMA@BKOGSPOTACOM (2) Temp:83.3333
Boltzman: 0.833333 &amp;gt; MyRandom: 0.3
**********************************************************************
50 My Solution: VOLKANSALMA@BKOGSPOTACOM (2) Temp:83
51 My Solution: VOLKANSALMA@BKOGSPOTACOM (2) Temp:82.6667
Boltzman: 0.826667 &amp;gt; MyRandom: 0.2
**********************************************************************
52 My Solution: VOLKANSALMA@BKOGSPOTACOM (2) Temp:82.3333
Boltzman: 0.823333 &amp;gt; MyRandom: 0.5
**********************************************************************
53 My Solution: VOLKANSALMA@BKOGSPOTACOM (2) Temp:82
54 My Solution: VOLKANSALMA@BLOGSPOTACOM (1) Temp:81.6667
Boltzman: 0.816667 &amp;gt; MyRandom: 0.7
**********************************************************************
55 My Solution: VOLKANSALMA@BLOGSPOTACOM (1) Temp:81.3333
Boltzman: 0.813333 &amp;gt; MyRandom: 0.3
**********************************************************************
56 My Solution: VOLKANSALMA@BLOGSPOTACOM (1) Temp:81
57 My Solution: VOLKANSALMA@BLOGSPOT@COM (0) Temp:80.6667
My Best Solution Is: VOLKANSALMA@BLOGSPOT@COM (0)

&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;http://volkansalma.blogspot.com&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21714815-3083362434852055254?l=volkansalma.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VolkanSalma/~4/MyQ5nbN8Akw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://volkansalma.blogspot.com/feeds/3083362434852055254/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://volkansalma.blogspot.com/2009/10/zeki-optimizasyon-teknikleri-2-tavlama.html#comment-form" title="0 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21714815/posts/default/3083362434852055254?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21714815/posts/default/3083362434852055254?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VolkanSalma/~3/MyQ5nbN8Akw/zeki-optimizasyon-teknikleri-2-tavlama.html" title="Zeki Optimizasyon Teknikleri - 2 (Tavlama Benzetimi)" /><author><name>Volkan SALMA</name><uri>http://www.blogger.com/profile/02180507354820111978</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14549475684880173267" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_SIJeFqYV1lQ/SuCq-wNW1QI/AAAAAAAABLM/3OyYy1fcHi0/s72-c/multipeak3D.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://volkansalma.blogspot.com/2009/10/zeki-optimizasyon-teknikleri-2-tavlama.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8DRH8zfSp7ImA9WxNWGEs.&quot;"><id>tag:blogger.com,1999:blog-21714815.post-2805971288547234474</id><published>2009-10-18T15:05:00.003+03:00</published><updated>2009-10-18T15:11:15.185+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-18T15:11:15.185+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programlama" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenCV" /><title>OpenCV 2.0 Windows .lib dosyaları?</title><content type="html">&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; OpenCV v2.0 kararlı sürüm yayınlandı. Pek çok güncelleme ve yeni fonksiyonlar içeriyor.(&lt;a href="http://opencv.willowgarage.com/wiki/OpenCV%20Change%20Logs"&gt;Neler Mesela?&lt;/a&gt;)&lt;br /&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;OpenCV yi windows ortamında visual studio ile kullanıyorsanız bir süprizle karşılaşabilirsiniz. Kurulumla birlikte
lib dosyaları gelmiyor. Bu dosyaları elde etmek için kaynak kodun isteğinize uygun konfigürasyon parametreleri ile 
derlenmesi gerekiyor.&lt;br /&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&amp;nbsp;&amp;nbsp; Derleme işlemine girmeden hazır olarak kullanmak isterseniz. Kendim için derlediğim libleri sizinle paylaşabilirim :)&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;a href="http://www.4shared.com/file/141479833/92d3350/OpenCVv20_VisualStudio.html"&gt;&lt;b&gt;Download OpenCV 2.0 lib,dll,include files for Visual Studio.&amp;nbsp;&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&amp;nbsp;Derleme ve konfigürasyon işlemin nasıl yapıldığını öğrenmek isterseniz &lt;a href="http://derindelimavi.blogspot.com/2009/10/sitemli-opencv-20-kurulumu-install.html"&gt;bluekid &lt;/a&gt;abimize bakalım.&lt;/li&gt;
&lt;li&gt;&amp;nbsp;Bu dosyaları kullanarak nasıl opencv projesi oluşturacağımızı bilmiyorsak &lt;a href="http://opencv.willowgarage.com/wiki/VisualC%2B%2B"&gt;buraya &lt;/a&gt;bakalım.(Visual Studio,Code::Blocks)&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Baktınız ama işin içinden çıkamadıysanız yorum şeklinde sorun. Cevap vermeye çalışayım.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="font-size: small;"&gt;&amp;nbsp;*Kütüphaneler Visual Studio Prof. Editionda OpenMP desteği ile derlenmiştir fakat test edilmemiştir.&lt;/span&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;http://volkansalma.blogspot.com&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21714815-2805971288547234474?l=volkansalma.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VolkanSalma/~4/Quw6UAQTtT8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://volkansalma.blogspot.com/feeds/2805971288547234474/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://volkansalma.blogspot.com/2009/10/opencv-20-windows-lib-dosyalar.html#comment-form" title="0 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21714815/posts/default/2805971288547234474?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21714815/posts/default/2805971288547234474?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VolkanSalma/~3/Quw6UAQTtT8/opencv-20-windows-lib-dosyalar.html" title="OpenCV 2.0 Windows .lib dosyaları?" /><author><name>Volkan SALMA</name><uri>http://www.blogger.com/profile/02180507354820111978</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14549475684880173267" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://volkansalma.blogspot.com/2009/10/opencv-20-windows-lib-dosyalar.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQGQXkzfSp7ImA9WxNXGUg.&quot;"><id>tag:blogger.com,1999:blog-21714815.post-146785331444521928</id><published>2009-10-08T00:09:00.005+03:00</published><updated>2009-10-08T00:18:40.785+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-08T00:18:40.785+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programlama" /><category scheme="http://www.blogger.com/atom/ns#" term="Optimizasyon" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>Zeki Optimizasyon Teknikleri - 1 (Hill Climbing)</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/_SIJeFqYV1lQ/Ss0DcWxIa5I/AAAAAAAABK8/2Fn5FV8tRdY/s1600-h/hills.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_SIJeFqYV1lQ/Ss0DcWxIa5I/AAAAAAAABK8/2Fn5FV8tRdY/s320/hills.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;Optimizasyon Algoritmalarımızdan ilki Stochastic(içerisinde rastgelelik bulunan) tekniklerden birisi olan  Hill Climbing algoritması. Bu yöntem pek çok uygulamada uygulama kolaylığı nedeniyle seçilebilir.&lt;br /&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&amp;nbsp;&amp;nbsp; Optimizasyonu istenen problemin gösterimi, elde olan çözüme göre komşu çözüm üreteci, ilk çözüm üreteci ve çözüm değerlendirme fonksiyonu uygulama için yeterli olmaktadır.&lt;br /&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&amp;nbsp;&amp;nbsp;Algoritmanın dezavantajları olarak yerel çözümlere takılabilmesini ve &amp;nbsp;çözümün seçilen başlangıç noktasına çok bağlı olmasını sayabiliriz.&lt;br /&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&amp;nbsp;&amp;nbsp; Hill Climbing yöntemden bahsedersek:&lt;br /&gt;
&lt;/div&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;İlk olarak başlangıç çözümü üretilir ve bu çözüm eniyi çözüm olarak kabul edilir. (Bu çözümün üretimi probleme göre rastgele olabileceği gibi problem konusunda uzman görüşü veya daha önce yapılmış çalışmalar yardımıyla da olabilir.)&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; Daha sonra bu probleme komşu bir çözüm kümesi üretilir.(Değişik sayıda olabilir.) Çözüm kümesi elemanları değerlendirilir. Çözüm kümesinin en iyi elemanı eğer bir önceki adımdaki eniyi çözümden daha iyi ise,  eniyi çözüm güncellenir.

Sonrasında en iyi çözüme göre yeni komşular üretilir ve iteratif olarak devam edilir. Belirli iterasyon sayısına ulaşıldığında, yeterli bir çözüm elde edildiğinde veya artık çözümler değişmediğinde iterasyon sonlandırılır.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;Hill Climbing yöntemini kullanarak derste geçen bir basit problem için C++ uygulama kodu hazırladım.

Problem: bd 30 karakterlik bir binary dizisi olmak üzere  f(bd) = |20 * dizideki_bir_sayisi(bd) - 100|  fonksiyonunu max yapan bd değeri? (Problemimizin çözümünün "111111111111111111111111111111" olduğu rahatça görülüyor.)&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;
Bu yazının hazırlanmasında hocam&amp;nbsp;&lt;a href="http://w3.gazi.edu.tr/~akcayol/"&gt;&lt;span style="color: black;"&gt;&lt;span style="text-decoration: none;"&gt;Doç.Dr. M.Ali Akcayol&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;' un Zeki Optimizasyon Teknikleri Dersi ders notları kullanılmıştır.&lt;br /&gt;
&lt;/blockquote&gt;
*Biçimlendirme güçlükleri nedeni ile kodda "&amp;lt;" ve "&amp;gt;" işaretleri yerine "-" işareti kullanılmıştır.&lt;br /&gt;
&lt;pre class="C++" name="code"&gt;//f(bd) = |20 * bir_sayisi(bd) - 100| fonksiyonunu max yapan
// 30 karakterlik binary dizisinin(bd) hill climbing algoritmasi ile
//bulunmasi.
//Volkan SALMA. http://volkansalma.blogspot.com

#include -iostream-
#include -vector-
#include -stdlib.h- //for rand funct.
#include -time.h- //time for rand function seed.
#include -math.h- // for abs function


using namespace std;

#define BINARY_ARRAY_SIZE 30
#define ITERATION_NUM 15
#define SOLUTION_SET_ELEMENT_CNT 30


struct Solution
{
    bool value[BINARY_ARRAY_SIZE];
};

vector-solution- generate40NeighbourSolutionToInput(Solution); //generate new solution depending old one.
Solution generateFirstSolutionRandomly(void);
int countOnes(bool); //number of 1's
long evaluteMyFunctionAndGiveResult(Solution); // f(bd) = |20 * bir_sayisi(bd) - 100|
void printSolutionResult(Solution,int,bool);


int main()
{
    Solution myBestSolution; //holds best solution.
    vector-solution- testSolutionSet;

    myBestSolution = generateFirstSolutionRandomly();

    for(int i = 0; i &amp;lt; ITERATION_NUM; i++)
    {
        testSolutionSet = generate40NeighbourSolutionToInput(myBestSolution);

        for(int j = 0 ; j &amp;lt; SOLUTION_SET_ELEMENT_CNT; j++)
        {
            if(evaluteMyFunctionAndGiveResult(testSolutionSet[j]) &amp;gt; evaluteMyFunctionAndGiveResult(myBestSolution) )
            {
                myBestSolution = testSolutionSet[j];
                break;
            }
        }

         printSolutionResult(myBestSolution,i+1,false);
    }

    printSolutionResult(myBestSolution,-1,true);

    return 0;
}


vector-solution- generate40NeighbourSolutionToInput(Solution in)
{
    Solution newSln;
    vector-solution- result;

    for(int i = 0; i &amp;lt; SOLUTION_SET_ELEMENT_CNT; i++)
    {
            for(int j = 0; j &amp;lt; BINARY_ARRAY_SIZE; j++ )
            {
                if(i != j) newSln.value[j] = in.value[j];
                else newSln.value[j] = !in.value[j];
            }

            result.push_back(newSln);
    }

    return result;
}

Solution generateFirstSolutionRandomly(void)
{
    Solution result;

    srand((unsigned)time(NULL));

    for(int i = 0; i &amp;lt; BINARY_ARRAY_SIZE; i++)
    {
        result.value[i] = rand()%2;
    }

    return result;
}

int countOnes(Solution in)
{
    int cnt = 0;

    for(int i= 0; i &amp;lt; BINARY_ARRAY_SIZE; i++)
    {
        if(in.value[i] == 1) cnt++;
    }

    return cnt;
}

long evaluteMyFunctionAndGiveResult(Solution solution)
{
     // f(bd) = |20 * bir_sayisi(bd) - 100|
     return abs(20*countOnes(solution)-100);
}
void printSolutionResult(Solution bestSolution,int iteration, bool isBest)
{
    if (isBest)cout--"Best Solution is:"--endl;
    else cout--iteration--". iteration:"--endl;
    for(int i = 0; i &amp;lt; BINARY_ARRAY_SIZE; i++)
    {
        cout--bestSolution.value[i];
    }

    cout--endl;
}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;http://volkansalma.blogspot.com&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21714815-146785331444521928?l=volkansalma.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VolkanSalma/~4/0O82223uKzc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://volkansalma.blogspot.com/feeds/146785331444521928/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://volkansalma.blogspot.com/2009/10/zeki-optimizasyon-teknikleri-1-hill.html#comment-form" title="0 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21714815/posts/default/146785331444521928?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21714815/posts/default/146785331444521928?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VolkanSalma/~3/0O82223uKzc/zeki-optimizasyon-teknikleri-1-hill.html" title="Zeki Optimizasyon Teknikleri - 1 (Hill Climbing)" /><author><name>Volkan SALMA</name><uri>http://www.blogger.com/profile/02180507354820111978</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14549475684880173267" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_SIJeFqYV1lQ/Ss0DcWxIa5I/AAAAAAAABK8/2Fn5FV8tRdY/s72-c/hills.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://volkansalma.blogspot.com/2009/10/zeki-optimizasyon-teknikleri-1-hill.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMMR3w8eyp7ImA9WxNSFEU.&quot;"><id>tag:blogger.com,1999:blog-21714815.post-522054097824908678</id><published>2009-08-23T20:46:00.001+03:00</published><updated>2009-08-28T20:28:06.273+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-28T20:28:06.273+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programlama" /><category scheme="http://www.blogger.com/atom/ns#" term="SVM" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenCV" /><title>OpenCV altında SVM kullanmak. (OpenCV SVM Sample Code)</title><content type="html">Bilindiği gibi OpenCV kütüphanesinin machine learning modülünde &lt;a href="http://www.csie.ntu.edu.tw/%7Ecjlin/libsvm/"&gt;libsvm&lt;/a&gt; wraplenmiştir. Böylece biz OpenCV kullanıcıları harici bir kütüphane kullanmadan SVM(Support Vector Machines)  i uygulamalarımızda kullanabiliriz.  Aşağıda bu konuda bir örnek hazırlamaya çalıştım. Yorumlarda açıklamalar mevcuttur.
 &lt;span class="fullpost"&gt; 
&lt;pre name="code" class="C++"&gt;
#include&lt;iostream&gt;
#include &lt;cv.h&gt;
#include &lt;cxcore.h&gt;
#include &lt;ml.h&gt;

using namespace std;

int main()
{
 CvSVM SVM;
 CvMat trainData;
 CvMat labels;
 CvTermCriteria criteria = cvTermCriteria(CV_TERMCRIT_EPS,100,0.001); //eğitim için term kriterimiz.

 int array_labels[5]= {1,1,1,-1,-1}; //5 eğitim verisinin bildiğimiz etiketleri.(labels, responses).
           //ilk 3 veri 1 sınıfına, diğer iki veri ise  -1 sınıfına ait.

 //eğitim verilerini diziye doldurdum. Gerçek uygulamalarda filedan okuma veya hesaplama şeklinde olur.
 //kodu basit tutmak için bu şekilde gösterdim.
 #pragma region data
 //5 egitim verisi olsun herbiri 40 tane feature içersin.
 
 float array_trainData[5][40] = { 1,0.443137,0.333333,0.392157,0.0313725,
          0.270588,0.870588,0.964706,1,0.439216,
          0.337255,0.380392,0.0235294,0.266667,0.862745,
          0.964706,1,0.431373,0.337255,0.368627,
          0.0156863, 0.262745, 0.854902, 0.964706, 1,
          0.423529, 0.341176, 0.360784, 0.0156863, 0.258824,
          0.847059, 0.964706, 1, 0.419608, 0.341176,
          0.34902, 0.0117647, 0.254902, 0.839216, 0.968627,

          0.572549,0.4,0.113725,0.0784314,0.137255,
          0.160784,0.00784314,0.337255,0.580392,0.407843,
          0.121569, 0.0745098, 0.133333, 0.156863, 0.00392157,
          0.341176, 0.584314, 0.411765, 0.12549, 0.0666667 ,
          0.129412, 0.152941, 0, 0.34902, 0.592157,
          0.419608, 0.129412, 0.0588235, 0.12549, 0.14902,
          0.00392157, 0.352941, 0.596078, 0.423529, 0.137255,
          0.054902, 0.121569, 0.145098, 0.00784314, 0.356863,

          0.882353, 0.741176, 0.305882, 0.305882, 0.278431,
          0.141176, 0.156863, 0.509804, 0.882353, 0.741176,
          0.305882, 0.305882, 0.27451, 0.141176, 0.14902,
          0.501961, 0.886275, 0.741176, 0.305882, 0.305882,
          0.270588, 0.141176, 0.141176, 0.498039, 0.886275,
          0.741176, 0.305882, 0.305882, 0.266667, 0.141176,
          0.137255, 0.490196, 0.886275, 0.737255, 0.305882,
          0.305882, 0.266667, 0.137255, 0.129412, 0.486275,

          0.929412, 0.917647, 0.717647, 0.356863, 0.133333,
          0.156863, 0.231373, 0.709804, 0.929412, 0.913725,
          0.721569, 0.356863, 0.137255, 0.164706, 0.219608,
          0.694118, 0.92549, 0.905882, 0.729412, 0.356863,
          0.141176, 0.168627, 0.207843,0.67451, 0.917647,
          0.901961, 0.733333, 0.360784, 0.141176, 0.172549,
          0.196078, 0.658824, 0.909804, 0.894118, 0.737255,
          0.360784, 0.141176, 0.180392,0.180392, 0.639216,

          0.760784, 0.372549, 0.407843, 0.298039, 0.160784,
          0.72549, 0.988235, 0.960784, 0.772549, 0.372549,
          0.411765, 0.305882, 0.160784, 0.709804, 0.992157,
          0.960784, 0.780392, 0.376471, 0.419608, 0.309804,
          0.160784, 0.698039, 0.992157, 0.960784, 0.784314,
          0.376471, 0.419608, 0.317647, 0.164706, 0.686275,
          0.996078, 0.964706, 0.792157, 0.376471, 0.423529,
          0.32549, 0.160784, 0.670588, 1, 0.964706
 };

#pragma endregion data

 cvInitMatHeader(&amp;amp;trainData,5,40,CV_32FC1,array_trainData); //eğitim verimizi tutacak matris.
 cvInitMatHeader(&amp;amp;labels,1,5,CV_32SC1,array_labels); //etiketlerimizi tutacak matris.
            //classification olduğu için CV_32SC1 kullandık.


 SVM.train(&amp;amp;trainData,&amp;amp;labels,0,0,CvSVMParams(CvSVM::C_SVC,CvSVM::RBF,3,0.025,0,1,0.5,0.1,NULL,
  criteria));  //train fonksiyonumuz (libsvm ile kontrol etmek için libsvm ile
      //gelen svm-train.exe nin default parametreleri kullanıldı.)
      //Parametrelerin detaylı açıklaması için opencv docs.

 //SVM.save("test.volkan"); //eğittiğimiz modeli kaydedip daha sonra kullanabiliriz.
for(int i = 0; i &lt; 5; i++ )
 {
  double r;
  CvMat sample;
  cvGetRow(&amp;trainData, &amp;sample, i );

  r = SVM.predict( &amp;sample );  //predict edip sonuçları kontrol edelim.
 }
}
&lt;/pre&gt;
 &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;http://volkansalma.blogspot.com&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21714815-522054097824908678?l=volkansalma.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VolkanSalma/~4/nxBudZ3f1Cs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://volkansalma.blogspot.com/feeds/522054097824908678/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://volkansalma.blogspot.com/2009/08/opencv-altnda-svm-kullanmak-opencv-svm.html#comment-form" title="0 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21714815/posts/default/522054097824908678?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21714815/posts/default/522054097824908678?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VolkanSalma/~3/nxBudZ3f1Cs/opencv-altnda-svm-kullanmak-opencv-svm.html" title="OpenCV altında SVM kullanmak. (OpenCV SVM Sample Code)" /><author><name>Volkan SALMA</name><uri>http://www.blogger.com/profile/02180507354820111978</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14549475684880173267" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://volkansalma.blogspot.com/2009/08/opencv-altnda-svm-kullanmak-opencv-svm.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YFQng8fSp7ImA9WxNRFU4.&quot;"><id>tag:blogger.com,1999:blog-21714815.post-3246931833410701379</id><published>2009-05-01T21:48:00.013+03:00</published><updated>2009-09-10T00:18:33.675+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-10T00:18:33.675+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programlama" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><title>Programınız için performans ipuçları.(x86)</title><content type="html">Genel amaçlı üretilmiş mimariler üzerinde sinyal işleme, görüntü işleme gibi ağır matematiksel işlemler gerektiren uygulamalar yapıyorsanız optimizasyon çok önemli bir hale gelir.

Bilgisayar tasarımı çalışırken bir zamanlar Türkiye Görüntü İşleme &lt;a href="http://groups.google.com/group/goruntu-isleme?hl=tr"&gt;mail grubuna&lt;/a&gt; gönderilen bir yazı aklıma geldi. Faydalı bir yazı olduğunu düşündüm ve blogumda paylaşmak  istedim. Yazı 17 Şubat 2008 tarihinde Mustafa Sakar tarafından &lt;a href="http://www.blogger.com/www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/22007.pdf"&gt;AMD x86 Code Optimization Guide&lt;/a&gt; tan yararlanılarak yazılmış.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;Özeti biraz daha özetleyip bilgimiz olan yerlere burnumuzu sokarsak ;)

&lt;span style="font-weight: bold;"&gt;1- 32-bit data tiplerini kullanın.&lt;/span&gt;  (Neden çünkü mimari bunun üzerine. Bütün aritmatik işlem birimleri 32 bit için design edilmiş. Daha büyük veri tipleri bölünüp yapılır. Küçük olanlarda 32 bitlik registerlara taşınır işaretli ise işaret genişletilir ekstra işlemler...)

&lt;span style="font-weight: bold;"&gt;2- Integer işlemlerinin işaretine önceden karar verin.&lt;/span&gt;
Bölüm ve kalan hesaplarken, döngü sayaçları, &lt;span style="font-weight: bold;"&gt;array indexleri&lt;/span&gt;
&lt;span style="font-weight: bold;"&gt;için unsigned tipler&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Integer-to-float&lt;/span&gt; dönüşümleri&lt;span style="font-weight: bold;"&gt; için signed&lt;/span&gt; tipler
kullanın.

Kötü örnek:
&lt;br /&gt;
&lt;pre&gt;&lt;span style="color: blue;"&gt;double&lt;/span&gt; x;        &lt;span style="color: green;"&gt;// MOV [tmep+4],0&lt;/span&gt;
&lt;span style="color: blue;"&gt;unsigned&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; i;  &lt;span style="color: green;"&gt;// MOV EAX, i&lt;/span&gt;
        &lt;span style="color: green;"&gt;// MOV [temp], EAX&lt;/span&gt;
x = i;           &lt;span style="color: green;"&gt;// FILD QWORD PTR [temp]&lt;/span&gt;
        &lt;span style="color: green;"&gt;// FSTP QWORD PTR [x}&lt;/span&gt;&lt;/pre&gt;
İyi örnek:
&lt;br /&gt;
&lt;pre&gt;&lt;span style="color: blue;"&gt;double&lt;/span&gt; x;        &lt;span style="color: green;"&gt;// FILD DWORD PTR [i]&lt;/span&gt;
&lt;span style="color: blue;"&gt;int&lt;/span&gt; i;           &lt;span style="color: green;"&gt;// FSTP QWORD PTR [x]&lt;/span&gt;
x = i;
&lt;/pre&gt;
&lt;span style="font-weight: bold;"&gt;3- Bölme işlemlerini işaretsiz tiplerle yapmak daha hızlıdır.&lt;/span&gt;
Kötü örnek:
&lt;br /&gt;
&lt;pre&gt;&lt;span style="color: blue;"&gt;int&lt;/span&gt; i;
i = i / &lt;span style="color: maroon;"&gt;4&lt;/span&gt;;         &lt;span style="color: green;"&gt;// MOV EAX,i&lt;/span&gt;
        &lt;span style="color: green;"&gt;// CDQ&lt;/span&gt;
        &lt;span style="color: green;"&gt;// AND EDX,3&lt;/span&gt;
        &lt;span style="color: green;"&gt;// ADD EAX, EDX&lt;/span&gt;
        &lt;span style="color: green;"&gt;// SAR EAX, 2&lt;/span&gt;
        &lt;span style="color: green;"&gt;// MOV i, EAX&lt;/span&gt;&lt;/pre&gt;
İyi Örnek:
&lt;br /&gt;
&lt;pre&gt;&lt;span style="color: blue;"&gt;unsigned&lt;/span&gt; i;
i = i / &lt;span style="color: maroon;"&gt;4&lt;/span&gt;;         &lt;span style="color: green;"&gt;// SHR i,2&lt;/span&gt;&lt;/pre&gt;
&lt;span style="font-weight: bold;"&gt;4-  &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Pointer-style kod yerine Array-style kod kullan.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; //Bu çok önemli..&lt;/span&gt;
Kötü örnek:
&lt;br /&gt;
&lt;pre&gt;&lt;span style="color: blue;"&gt;typedef&lt;/span&gt; &lt;span style="color: blue;"&gt;struct&lt;/span&gt; {
&lt;span style="color: blue;"&gt;float&lt;/span&gt; x,y,z,w;
} VERTEX;
&lt;span style="color: blue;"&gt;typedef&lt;/span&gt; &lt;span style="color: blue;"&gt;struct&lt;/span&gt; {
&lt;span style="color: blue;"&gt;float&lt;/span&gt; m[&lt;span style="color: maroon;"&gt;4&lt;/span&gt;][&lt;span style="color: maroon;"&gt;4&lt;/span&gt;];
} MATRIX;

&lt;span style="color: blue;"&gt;void&lt;/span&gt; XForm (&lt;span style="color: blue;"&gt;float&lt;/span&gt; *res, &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;float&lt;/span&gt; *v, &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;float&lt;/span&gt; *m, &lt;span style="color: blue;"&gt;int&lt;/span&gt;
numverts) {
&lt;span style="color: blue;"&gt;float&lt;/span&gt; dp;
&lt;span style="color: blue;"&gt;int&lt;/span&gt; i;
&lt;span style="color: blue;"&gt;const&lt;/span&gt; VERTEX* vv = (VERTEX *)v;
&lt;span style="color: blue;"&gt;for&lt;/span&gt; (i = &lt;span style="color: maroon;"&gt;0&lt;/span&gt;; i &amp;lt; dp =&lt;span style="color: maroon;"&gt;" vv-"&lt;/span&gt;&amp;gt;x * *m++;
     dp += vv-&amp;gt;y * *m++;
     dp += vv-&amp;gt;z * *m++;
     dp += vv-&amp;gt;w * *m++;
     *res++ = dp; &lt;span style="color: green;"&gt;/* write transformed x */&lt;/span&gt;
     dp = vv-&amp;gt;x * *m++;
     dp += vv-&amp;gt;y * *m++;
     dp += vv-&amp;gt;z * *m++;
     dp += vv-&amp;gt;w * *m++;
     *res++ = dp; &lt;span style="color: green;"&gt;/* write transformed y */&lt;/span&gt;
     dp = vv-&amp;gt;x * *m++;
     dp += vv-&amp;gt;y * *m++;
     dp += vv-&amp;gt;z * *m++;
     dp += vv-&amp;gt;w * *m++;
     *res++ = dp; &lt;span style="color: green;"&gt;/* write transformed z */&lt;/span&gt;
     dp = vv-&amp;gt;x * *m++;
     dp += vv-&amp;gt;y * *m++;
     dp += vv-&amp;gt;z * *m++;
     dp += vv-&amp;gt;w * *m++;
     *res++ = dp; &lt;span style="color: green;"&gt;/* write transformed w */&lt;/span&gt;
     ++vv; &lt;span style="color: green;"&gt;/* next input vertex */&lt;/span&gt;
     m -= &lt;span style="color: maroon;"&gt;16&lt;/span&gt;; &lt;span style="color: green;"&gt;/* reset to start of transform matrix */&lt;/span&gt;
}
}&lt;/pre&gt;
iyi Örnek:
&lt;br /&gt;
&lt;pre&gt;&lt;span style="color: blue;"&gt;typedef&lt;/span&gt; &lt;span style="color: blue;"&gt;struct&lt;/span&gt; {
&lt;span style="color: blue;"&gt;float&lt;/span&gt; x,y,z,w;
} VERTEX;
&lt;span style="color: blue;"&gt;typedef&lt;/span&gt; &lt;span style="color: blue;"&gt;struct&lt;/span&gt; {
&lt;span style="color: blue;"&gt;float&lt;/span&gt; m[&lt;span style="color: maroon;"&gt;4&lt;/span&gt;][&lt;span style="color: maroon;"&gt;4&lt;/span&gt;];
} MATRIX;

&lt;span style="color: blue;"&gt;void&lt;/span&gt; XForm (&lt;span style="color: blue;"&gt;float&lt;/span&gt; *res, &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;float&lt;/span&gt; *v, &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;float&lt;/span&gt; *m, &lt;span style="color: blue;"&gt;int&lt;/span&gt;
numverts) {
&lt;span style="color: blue;"&gt;int&lt;/span&gt; i;
&lt;span style="color: blue;"&gt;const&lt;/span&gt; VERTEX* vv = (VERTEX *)v;
&lt;span style="color: blue;"&gt;const&lt;/span&gt; MATRIX* mm = (MATRIX *)m;
VERTEX* rr = (VERTEX *)res;
&lt;span style="color: blue;"&gt;for&lt;/span&gt; (i = &lt;span style="color: maroon;"&gt;0&lt;/span&gt;; i &amp;lt;&amp;gt;x = vv-&amp;gt;x*mm-&amp;gt;m[&lt;span style="color: maroon;"&gt;0&lt;/span&gt;][&lt;span style="color: maroon;"&gt;0&lt;/span&gt;] + vv-&amp;gt;y*mm-&amp;gt;m[&lt;span style="color: maroon;"&gt;0&lt;/span&gt;][&lt;span style="color: maroon;"&gt;1&lt;/span&gt;] +
             vv-&amp;gt;z*&amp;lt;div id=&lt;span style="color: maroon;"&gt;":1l"&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt;=&lt;span style="color: maroon;"&gt;"ii gt"&lt;/span&gt;&amp;gt;&amp;lt;wbr&amp;gt;mm-&amp;gt;m[&lt;span style="color: maroon;"&gt;0&lt;/span&gt;][&lt;span style="color: maroon;"&gt;2&lt;/span&gt;] + vv-&amp;gt;w*mm-&amp;gt;m[&lt;span style="color: maroon;"&gt;0&lt;/span&gt;][&lt;span style="color: maroon;"&gt;3&lt;/span&gt;];
     rr-&amp;gt;y = vv-&amp;gt;x*mm-&amp;gt;m[&lt;span style="color: maroon;"&gt;1&lt;/span&gt;][&lt;span style="color: maroon;"&gt;0&lt;/span&gt;] + vv-&amp;gt;y*mm-&amp;gt;m[&lt;span style="color: maroon;"&gt;1&lt;/span&gt;][&lt;span style="color: maroon;"&gt;1&lt;/span&gt;] +
             vv-&amp;gt;z*&amp;lt;wbr&amp;gt;mm-&amp;gt;m[&lt;span style="color: maroon;"&gt;1&lt;/span&gt;][&lt;span style="color: maroon;"&gt;2&lt;/span&gt;] + vv-&amp;gt;w*mm-&amp;gt;m[&lt;span style="color: maroon;"&gt;1&lt;/span&gt;][&lt;span style="color: maroon;"&gt;3&lt;/span&gt;];
     rr-&amp;gt;z = vv-&amp;gt;x*mm-&amp;gt;m[&lt;span style="color: maroon;"&gt;2&lt;/span&gt;][&lt;span style="color: maroon;"&gt;0&lt;/span&gt;] + vv-&amp;gt;y*mm-&amp;gt;m[&lt;span style="color: maroon;"&gt;2&lt;/span&gt;][&lt;span style="color: maroon;"&gt;1&lt;/span&gt;] +
             vv-&amp;gt;z*&amp;lt;wbr&amp;gt;mm-&amp;gt;m[&lt;span style="color: maroon;"&gt;2&lt;/span&gt;][&lt;span style="color: maroon;"&gt;2&lt;/span&gt;] + vv-&amp;gt;w*mm-&amp;gt;m[&lt;span style="color: maroon;"&gt;2&lt;/span&gt;][&lt;span style="color: maroon;"&gt;3&lt;/span&gt;];
     rr-&amp;gt;w = vv-&amp;gt;x*mm-&amp;gt;m[&lt;span style="color: maroon;"&gt;3&lt;/span&gt;][&lt;span style="color: maroon;"&gt;0&lt;/span&gt;] + vv-&amp;gt;y*mm-&amp;gt;m[&lt;span style="color: maroon;"&gt;3&lt;/span&gt;][&lt;span style="color: maroon;"&gt;1&lt;/span&gt;] +
             vv-&amp;gt;z*&amp;lt;wbr&amp;gt;mm-&amp;gt;m[&lt;span style="color: maroon;"&gt;3&lt;/span&gt;][&lt;span style="color: maroon;"&gt;2&lt;/span&gt;] + vv-&amp;gt;w*mm-&amp;gt;m[&lt;span style="color: maroon;"&gt;3&lt;/span&gt;][&lt;span style="color: maroon;"&gt;3&lt;/span&gt;];
}
}&lt;/pre&gt;
&lt;span style="font-weight: bold;"&gt;5-  Kısa donguleri tamamen kaldırmalısınız.&lt;/span&gt;
Kötü örnek:
&lt;br /&gt;
&lt;pre&gt;&lt;span style="color: green;"&gt;// 3D-transform: multiply vector V by 4x4 transform matrix M&lt;/span&gt;
&lt;span style="color: blue;"&gt;for&lt;/span&gt; (i=&lt;span style="color: maroon;"&gt;0&lt;/span&gt;; i&amp;lt;&lt;span style="color: maroon;"&gt;4&lt;/span&gt;; i++) {
        r[i] = &lt;span style="color: maroon;"&gt;0&lt;/span&gt;;
        &lt;span style="color: blue;"&gt;for&lt;/span&gt; (j=&lt;span style="color: maroon;"&gt;0&lt;/span&gt;; j&amp;lt;&lt;span style="color: maroon;"&gt;4&lt;/span&gt;; j++) {
                r[i] += M[j][i]*V[j];
        }
}&lt;/pre&gt;
İyi Örnek:&lt;br /&gt;
&lt;pre&gt;&lt;span style="color: green;"&gt;// 3D-transform: multiply vector V by 4x4 transform matrix M&lt;/span&gt;
r[&lt;span style="color: maroon;"&gt;0&lt;/span&gt;] =  M[&lt;span style="color: maroon;"&gt;0&lt;/span&gt;][&lt;span style="color: maroon;"&gt;0&lt;/span&gt;]*V[&lt;span style="color: maroon;"&gt;0&lt;/span&gt;] + M[&lt;span style="color: maroon;"&gt;1&lt;/span&gt;][&lt;span style="color: maroon;"&gt;0&lt;/span&gt;]*V[&lt;span style="color: maroon;"&gt;1&lt;/span&gt;] + M[&lt;span style="color: maroon;"&gt;2&lt;/span&gt;][&lt;span style="color: maroon;"&gt;0&lt;/span&gt;]*V[&lt;span style="color: maroon;"&gt;2&lt;/span&gt;] +
      M[&lt;span style="color: maroon;"&gt;3&lt;/span&gt;][&lt;span style="color: maroon;"&gt;0&lt;/span&gt;]*V[&lt;span style="color: maroon;"&gt;3&lt;/span&gt;];
r[&lt;span style="color: maroon;"&gt;1&lt;/span&gt;] =  M[&lt;span style="color: maroon;"&gt;0&lt;/span&gt;][&lt;span style="color: maroon;"&gt;1&lt;/span&gt;]*V[&lt;span style="color: maroon;"&gt;0&lt;/span&gt;] + M[&lt;span style="color: maroon;"&gt;1&lt;/span&gt;][&lt;span style="color: maroon;"&gt;1&lt;/span&gt;]*V[&lt;span style="color: maroon;"&gt;1&lt;/span&gt;] + M[&lt;span style="color: maroon;"&gt;2&lt;/span&gt;][&lt;span style="color: maroon;"&gt;1&lt;/span&gt;]*V[&lt;span style="color: maroon;"&gt;2&lt;/span&gt;] +
      M[&lt;span style="color: maroon;"&gt;3&lt;/span&gt;][&lt;span style="color: maroon;"&gt;1&lt;/span&gt;]*V[&lt;span style="color: maroon;"&gt;3&lt;/span&gt;];
r[&lt;span style="color: maroon;"&gt;2&lt;/span&gt;] =  M[&lt;span style="color: maroon;"&gt;0&lt;/span&gt;][&lt;span style="color: maroon;"&gt;2&lt;/span&gt;]*V[&lt;span style="color: maroon;"&gt;0&lt;/span&gt;] + M[&lt;span style="color: maroon;"&gt;1&lt;/span&gt;][&lt;span style="color: maroon;"&gt;2&lt;/span&gt;]*V[&lt;span style="color: maroon;"&gt;1&lt;/span&gt;] + M[&lt;span style="color: maroon;"&gt;2&lt;/span&gt;][&lt;span style="color: maroon;"&gt;2&lt;/span&gt;]*V[&lt;span style="color: maroon;"&gt;2&lt;/span&gt;] +
      M[&lt;span style="color: maroon;"&gt;3&lt;/span&gt;][&lt;span style="color: maroon;"&gt;2&lt;/span&gt;]*V[&lt;span style="color: maroon;"&gt;3&lt;/span&gt;];
r[&lt;span style="color: maroon;"&gt;3&lt;/span&gt;] =  M[&lt;span style="color: maroon;"&gt;0&lt;/span&gt;][&lt;span style="color: maroon;"&gt;3&lt;/span&gt;]*V[&lt;span style="color: maroon;"&gt;0&lt;/span&gt;] + M[&lt;span style="color: maroon;"&gt;1&lt;/span&gt;][&lt;span style="color: maroon;"&gt;3&lt;/span&gt;]*V[&lt;span style="color: maroon;"&gt;1&lt;/span&gt;] + M[&lt;span style="color: maroon;"&gt;2&lt;/span&gt;][&lt;span style="color: maroon;"&gt;3&lt;/span&gt;]*V[&lt;span style="color: maroon;"&gt;2&lt;/span&gt;] +
      M[&lt;span style="color: maroon;"&gt;3&lt;/span&gt;][&lt;span style="color: maroon;"&gt;3&lt;/span&gt;]*v[&lt;span style="color: maroon;"&gt;3&lt;/span&gt;];&lt;/pre&gt;
&lt;span style="font-weight: bold;"&gt;6- Gereksiz Store-to-Load hesaplamalardan kacınmalısınız.&lt;/span&gt;

Kötü Örnek:
&lt;span style="color: blue;"&gt;for&lt;/span&gt; (k = &lt;span style="color: maroon;"&gt;1&lt;/span&gt;; k &amp;lt; VECLEN; k++) {
x[k] = x[k-&lt;span style="color: maroon;"&gt;1&lt;/span&gt;] + y[k]; &lt;span style="color: green;"&gt;//Buralar facia durmadan memory e başvur. registera load et
//sonucu geri registerdan memory'e store et..&lt;/span&gt;
}
&lt;span style="color: blue;"&gt;for&lt;/span&gt; (k = &lt;span style="color: maroon;"&gt;1&lt;/span&gt;; k &amp;lt; VECLEN; k++) {
x[k] = z[k] * (y[k] - x[k-&lt;span style="color: maroon;"&gt;1&lt;/span&gt;]);
}

İyi örnek:
&lt;br /&gt;
&lt;pre&gt;&lt;span style="color: blue;"&gt;double&lt;/span&gt; x[VECLEN], y[VECLEN], z[VECLEN];
&lt;span style="color: blue;"&gt;unsigned&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; k;
&lt;span style="color: blue;"&gt;double&lt;/span&gt; t;
t = x[&lt;span style="color: maroon;"&gt;0&lt;/span&gt;];

&lt;span style="color: blue;"&gt;for&lt;/span&gt; (k = &lt;span style="color: maroon;"&gt;1&lt;/span&gt;; k &amp;lt; VECLEN; k++) {
t = t + y[k];
x[k] = t;
}
t = x[&lt;span style="color: maroon;"&gt;0&lt;/span&gt;];
&lt;span style="color: blue;"&gt;for&lt;/span&gt; (k = &lt;span style="color: maroon;"&gt;1&lt;/span&gt;; k &amp;lt; VECLEN; k++) {
t = z[k] * (y[k] - t);
x[k] = t;
}&lt;/pre&gt;
&lt;span style="font-weight: bold;"&gt;7 - Çarpma işlemi bölmeden hızlıdır.&lt;/span&gt;
Kötü örnek:
&lt;br /&gt;
&lt;pre&gt;&lt;span style="color: blue;"&gt;double&lt;/span&gt; a,b,c,e,f;
e = a/c;
f = b/c;&lt;/pre&gt;
İyi örnek:
&lt;br /&gt;
&lt;pre&gt;&lt;span style="color: blue;"&gt;double&lt;/span&gt; a,b,c,e,f,t;
t = &lt;span style="color: maroon;"&gt;1&lt;/span&gt;/c;
e = a*t
f = b*t;&lt;/pre&gt;
Kötü örnek:
&lt;br /&gt;
&lt;pre&gt;&lt;span style="color: blue;"&gt;int&lt;/span&gt; i,j,k,m;
m = i / j / k;&lt;/pre&gt;
İyi örnek:
&lt;br /&gt;
&lt;pre&gt;&lt;span style="color: blue;"&gt;int&lt;/span&gt; i,j,k,l;
m = i / (j * k);&lt;/pre&gt;
&lt;span style="font-weight: bold;"&gt;8 - Hızlı Floating-Point-to-Integer cevrimi kullanın.&lt;/span&gt;
Yavaş Örnek:
&lt;br /&gt;
&lt;pre&gt;&lt;span style="color: blue;"&gt;double&lt;/span&gt; x;
&lt;span style="color: blue;"&gt;int&lt;/span&gt; i;
i = x;&lt;span style="font-family: Georgia,serif;"&gt;

&lt;/span&gt;&lt;/pre&gt;
Hızlı Örnek:
&lt;br /&gt;
&lt;pre&gt;&lt;span style="color: blue;"&gt;#define&lt;/span&gt; DOUBLE2INT(i,d) \
{&lt;span style="color: blue;"&gt;double&lt;/span&gt; t = ((d)+&lt;span style="color: maroon;"&gt;6755399441055744&lt;/span&gt;&lt;span style="color: maroon;"&gt;.0&lt;/span&gt;); i=*((&lt;span style="color: blue;"&gt;int&lt;/span&gt; *)(&amp;amp;t));}

&lt;span style="color: blue;"&gt;double&lt;/span&gt; x;
&lt;span style="color: blue;"&gt;int&lt;/span&gt; i;

DOUBLE2INT(i,x);&lt;/pre&gt;
***Bazı maddeleri atladım. En önemli gördüklerimi seçmek istedim.
Görüntü işleme ile uğraşıyor performans sıkıntısı yaşıyorsanız hem de çift çekirdekli işlemciniz varsa ilk işiniz bazı işleri paralel yaptırmak olsun. Bluekid abimize link verelim.
&lt;a href="http://derindelimavi.blogspot.com/2008/09/openmp.html"&gt;OpenMP genel.&lt;/a&gt; &lt;a href="http://derindelimavi.blogspot.com/2008/09/openmp-ve-opencv-ile-kenar-bulma.html"&gt;OpenMP uygulama.&lt;/a&gt;

İmkanınız varsa güncel compiler lar kullanın. Yeni compilerla yeni donanımlar için en iyi optimizasyon seçenekleri sağlarlar. Performans bakımından aynı mfc uygulamasının MS un VC++ 9 ile derlenmesi ile VC++ 6 ile derlenmesi arasında inanılmaz farklar gözlenmiştir.

$$$* Ayrıca intel işlemci kullanıyorsanız intelin kendi compiler ı için vaatleri büyük. (Denenmemiştir.)&lt;div class="blogger-post-footer"&gt;http://volkansalma.blogspot.com&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21714815-3246931833410701379?l=volkansalma.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VolkanSalma/~4/RK_peolkuGA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://volkansalma.blogspot.com/feeds/3246931833410701379/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://volkansalma.blogspot.com/2009/05/programnz-icin-performans-ipuclarx86.html#comment-form" title="5 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21714815/posts/default/3246931833410701379?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21714815/posts/default/3246931833410701379?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VolkanSalma/~3/RK_peolkuGA/programnz-icin-performans-ipuclarx86.html" title="Programınız için performans ipuçları.(x86)" /><author><name>Volkan SALMA</name><uri>http://www.blogger.com/profile/02180507354820111978</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14549475684880173267" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://volkansalma.blogspot.com/2009/05/programnz-icin-performans-ipuclarx86.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkINSXk_fSp7ImA9WxNSFEU.&quot;"><id>tag:blogger.com,1999:blog-21714815.post-2758055668752063760</id><published>2009-04-25T14:37:00.011+03:00</published><updated>2009-08-28T20:29:58.745+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-28T20:29:58.745+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="minix3" /><category scheme="http://www.blogger.com/atom/ns#" term="embedded" /><title>minix3 macerası - 2 (kurulum)</title><content type="html">Minix3 için gerekli sistem gereksinimleri şöyle.

&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_SIJeFqYV1lQ/SfMB8NCoRVI/AAAAAAAAAqg/E6stAM_mpuE/s1600-h/m-logo.gif"&gt;&lt;img style="cursor: pointer; width: 52px; height: 60px;" src="http://2.bp.blogspot.com/_SIJeFqYV1lQ/SfMB8NCoRVI/AAAAAAAAAqg/E6stAM_mpuE/s200/m-logo.gif" alt="" id="BLOGGER_PHOTO_ID_5328604917913896274" border="0" /&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;ul&gt;&lt;li&gt;386, 486, or Pentium CPU.&lt;/li&gt;&lt;li&gt;16 veya 8 MB ram.&lt;/li&gt;&lt;li&gt;Kernel için 50 mB. CD deki diğer paketlerin hepsini kuracaksanın 600 mB harddisk alanı.&lt;/li&gt;&lt;li&gt;Boş bir CD iso yun yazmak için. Flashtan boot edebilen bir makinanız varsa flash diskten de kurulum yapabilirsiniz(Ben CD den yaptım.)&lt;/li&gt;&lt;/ul&gt;VMware, VirtualPC gibi simulatörler üzerinede kurulum yapılabiliyor ama biliyorsunuz bizi bozar onlar.
&lt;span class="fullpost"&gt;
Kurulum Adımları:

&lt;ul&gt;&lt;li&gt;Maceraya 00.40 civarında başladım. Minix3 ün resmi &lt;a href="http://www.minix3.org/download/"&gt;download adresinden&lt;/a&gt;  IDE-3.1.2a.zip   (298 MB) zip dosyasını indirdim. Bu dosya indiriledururken içerisinde kurulumla alakalı bilgiler içeren &lt;a href="http://www.minix3.org/doc/A-312.pdf"&gt;pdf'i&lt;/a&gt; okumakta yarar var.&lt;/li&gt;&lt;li&gt;Belgede kurulum sırasında ethernet kartının chip seti ile alakalı bilgiler sorulacağı yazıyor bu nedenle ethernet kartımın modelini SURECOM EP-320 X-V/VI 32 Bit olarak not ediyorum bi kenara. (Kartınızın modelini bilmiyorsanız belirtmeden de geçebiliyorsunuz. ) &lt;/li&gt;&lt;li&gt;Bu sırada iso muş inmiş. Sıkıştırılmış olduğundan windows ortamındaki favori open source  zip açıcımız &lt;a href="http://www.7-zip.org/"&gt;7zip&lt;/a&gt; ile bir güzel açıyoruz.&lt;/li&gt;&lt;li&gt;Açılan dosyayı windows ortamının vazgeçilmez cd yazma programlarından &lt;a href="http://www.imgburn.com/"&gt;ImgBurn &lt;/a&gt;programı(2 mb lık efsane)  ile cd ye yazıyoruz. 2$ bağışta bulunulabilir ImgBurn un sitesine girmişken ;)&lt;/li&gt;&lt;li&gt;Sonra cd mizi sisteme kuracağımız makinaya takıyoruz. Bios tan cd den boot etmesi için ayarı yapıyoruz. (Saat ~02.00)
&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Ben P2 400, 128 MB makina üzerine üzerine kurulum yaptım. Hardiskte yedeklemem gereken hiç bir şey olmadığından kurulumun otomatik olarak yaptığı partition yapısını kullandım. Bu nedenle partition lama işlemlerini çok iyi bilemeyeceğim. Siz eğer sistemininiz yanına kurulum yapmak isterseniz &lt;a href="http://www.minix3.org/doc/partitions.html"&gt;bu&lt;/a&gt; dökümanı okuyun derim.&lt;/li&gt;&lt;li&gt;Kurulum başladığında önce bir açıklama geliyor. Sonra klavye tipini soruyor. Enter a basarak default değeri seçebiliyorsunuz. (ing klavye diziliminde kullanacağız.) Ethernet kartınızın chipseti hakkında bilgi istiyor. 0 seçerek direk geçebilirsiniz.(no networking) Veya bunlar dışında (7) diyip daha sonra configure etmek için bırakabilirsiniz. Ben burada kendi ethernet kartı bilgilerimi göremediğime şaşırmadım çünkü windows bile tanımıyor. Her kurulumda driver arıyorum. Realtek vs çok kullanılan chipsetler mevcut.
&lt;/li&gt;&lt;li&gt;Nasıl bir kurulum yapmak istediğimizi soruyor. Minimal kurulum veya tam kurulum yapabiliriz. Ben tam kurulum için "F" seçeneğini  kullandım.&lt;/li&gt;&lt;li&gt;Partitioning işlemlerine sıra geldi ben direk tek disk üzerine tek partionda kurulum yapmak istediğimden default seçeneklerle ilerliyorum. disk number "0" enter region number "0" enter.&lt;/li&gt;&lt;li&gt;home klasoru için kaç mb yer ayırmak istediğimizi soruyor. 200 mb değer verdim.
&lt;/li&gt;&lt;li&gt;Kilobyte cinsinden blocksize ı soruyor. Default olan 4Kb ı seçtim. Daha kısıtlı kaynaklar için değişik kb lar seçilebiliyor.
&lt;/li&gt;&lt;li&gt;Daha sonra disk yüzeyinde bad sector taramasına başlıyor. İkinci adımda dayanamadım(epey uzun sürecekti. ilerleme grafiğine bakılırsa) ctrl+c ile işlem tamamlanmadan devam ettim.&lt;/li&gt;&lt;li&gt;Tüm işlemler 10 dk civarı sürdü. Ve sistemimiz hazır oldu. shutdown diyerek sistemden logout oluyoruz.(çünkü live cd üzerinden çalışıyor)  ve boot komutu ile sistemi yüklediğimiz yerden boot ediyoruz. Komut "boot dXp0" şeklinde. Burada X biosta görülen sürücü numarası.(Kaçıncı disk olduğu.) p den sonrasıda partition. Bizim kurulumumuz için komut "boot d0p0" şeklinde...&lt;/li&gt;&lt;li&gt;shutdowndan sonra konsole tekrar düşüyoruz yukarıdaki şekilde boot komutunu verdiğimizde login: root, pass: ""(hiç bir şey yazmadan enter) şeklinde login oluyoruz. Sistemi unix komutları ile gezebiliriz. Bu esnada. Eğer paket kurmak istersek packman isminde paket yönetici var. packman komutu ile başlatabiliyoruz.&lt;/li&gt;&lt;li&gt;packman ile internetten veya cd den paket kurulumu yapabiliriz. cd cd sürücüde iken packman komurunu verdiğimizde cd deki paketleri tarıyor 1 seçeneği ile tüm paketleri kurabiliriz. 2 ile tüm paketler + source kodlarını kurabiliriz. 3 ile istediğimiz paketi seçebiliriz. 4 seçeneği ile ise packmanden çıkabiliyoruz.
&lt;/li&gt;&lt;li&gt;Benim ethernet kartım tanınmadığı için kurulum cdsi ile gelen paketleri kurdum. Bu aşama biraz uzun sürebiliyor. (İlk aşamada sadece binary leri kurmanızı tavsiye  ederim.) 30-45 dakika civarı sürebilir.  Kurulum sırasında sistem tepkisiz görünebilir hemen resetlemeyin.(nede olsa yüksek kararlı sistem kullanıyoruz ;) ) Kurulum tamamlansın. Devamı inşallah sonraki yazıya.  &lt;/li&gt;&lt;/ul&gt;*Biraz aksilikler çıktı ama sabah 06.00 civarında xwindowu gördüm. Yazının devamı gelecek. It's time to study. ;)
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;http://volkansalma.blogspot.com&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21714815-2758055668752063760?l=volkansalma.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VolkanSalma/~4/dHgQ5hh1TPY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://volkansalma.blogspot.com/feeds/2758055668752063760/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://volkansalma.blogspot.com/2009/04/minix3-maceras-2-kurulum.html#comment-form" title="1 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21714815/posts/default/2758055668752063760?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21714815/posts/default/2758055668752063760?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VolkanSalma/~3/dHgQ5hh1TPY/minix3-maceras-2-kurulum.html" title="minix3 macerası - 2 (kurulum)" /><author><name>Volkan SALMA</name><uri>http://www.blogger.com/profile/02180507354820111978</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14549475684880173267" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_SIJeFqYV1lQ/SfMB8NCoRVI/AAAAAAAAAqg/E6stAM_mpuE/s72-c/m-logo.gif" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://volkansalma.blogspot.com/2009/04/minix3-maceras-2-kurulum.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkACQXg6fip7ImA9WxNSFEU.&quot;"><id>tag:blogger.com,1999:blog-21714815.post-7523883995776268529</id><published>2009-04-25T06:16:00.012+03:00</published><updated>2009-08-28T20:32:40.616+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-28T20:32:40.616+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="minix3" /><category scheme="http://www.blogger.com/atom/ns#" term="embedded" /><title>minix3 macerası - 1</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_SIJeFqYV1lQ/SfL0k1MfzNI/AAAAAAAAAqQ/mqCFEePWm2A/s1600-h/logo.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 118px; height: 74px;" src="http://3.bp.blogspot.com/_SIJeFqYV1lQ/SfL0k1MfzNI/AAAAAAAAAqQ/mqCFEePWm2A/s200/logo.gif" alt="" id="BLOGGER_PHOTO_ID_5328590222724680914" border="0" /&gt;&lt;/a&gt;
Uzun bir  zamandır görüntü işleme uygulamaları geliştirip çalıştırabileceğim hızlı bir şekilde açılıp kapanabilen ama üzerinde  arayüz uygulayabileceğim gömülü  bir dağıtım bakıyordum.
&lt;br&gt;&lt;br&gt;

Kendisinden çok şey öğrendiğimiz &lt;a href="http://derindelimavi.blogspot.com/"&gt;Bluekid &lt;/a&gt;abimiz sağolsun minix3 ü önerdi. Minix3 tam  aradığım özelliklere sahip ayrıca üzerinde FLTK çalışabiliyor. ;)
&lt;br&gt;&lt;br&gt;

&lt;a href="http://www.minix3.org/"&gt;Minix3 ün sitesinde&lt;/a&gt; sistemin hedef alanları olarak şunlar gösteriliyor.
&lt;br&gt;&lt;br&gt;
&lt;ul&gt;&lt;li&gt;Yüksek derecede kararlılık (reliability) istenen uygulamalarda.&lt;/li&gt;&lt;li&gt;Tek-chip, küçük ram e sahip, düşük güç tüketen cihazlar vs.
&lt;/li&gt;&lt;li&gt;Embedded sistemler. (camera, cep telefonu vs.).&lt;/li&gt;&lt;li&gt;GPL lisansının çok kısıtlayıcı olduğu uygulamalar.(minix3 BSD lisansına sahiptir.)&lt;/li&gt;&lt;li&gt;Eğitim.(Üniversitelerde Operating System dersleri için.)&lt;/li&gt;&lt;/ul&gt;
&lt;span class="fullpost"&gt;
Linuxun gelişimini takip edememiş birisi olarak hep linux kerneli çok karmaşık,  linux configurasyonu zor gelir(ya da gözümde büyütüyorum.) Uzun zamandır değişik linux dağıtımlar kullansamda alt seviyelere hiç inemedim.

&lt;br&gt;&lt;br&gt;
Minix3 dağıtımının bir güzel özelliği de bu. Henüz bakmadım ama ~5000 satırlık bir kernel kodu varmış. Üzerinde çalıştırılabilinecek kütüphaneler ise bir hayli fazla. &lt;a href="http://www.minix3.org/software/"&gt;Bknz.&lt;/a&gt;

&lt;br&gt;&lt;br&gt;
&lt;a href="http://www.minix3.org/doc/screenies.html"&gt;Buradan&lt;/a&gt; screenshot lara göz atabilirsiniz.
Bir ayda yaklaşık 12000 kişi iso dosyasını siteden indirip kurulum yapıyormuş.&lt;a href="http://www.minix3.org/soc-2009/"&gt;Buranın&lt;/a&gt; yalancısıyım.

&lt;br&gt;&lt;br&gt;
Ben de evdeki emektar makinayı(Intel P2 400,256 Mb Ram) bu sistemden mahrum bırakmak istemedim. Bir gece uğraşarak xwindow u görmeyi başardım.  Gerçekten sisteme çok içim ısındığını söylemeliyim. Keşke derslerden projelerden biraz daha vakit olsada doya doya kurcalayabilsem. Uzun bir süre makinada kalacak gibi  görülüyor. Üzerinde önce fltk yı çalıştırıp basit  uygulamalar yapmak sonrada opencv çalıştırmak gibi düşüncelerim var.

&lt;br&gt;&lt;br&gt;
* Yalnız sistemde floating point donanımsal olarak desteklenmiyormuş. Bu iş nasıl etkiler bilemiyorum. Beraber görelim..
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;http://volkansalma.blogspot.com&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21714815-7523883995776268529?l=volkansalma.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VolkanSalma/~4/nKHJn0lK67A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://volkansalma.blogspot.com/feeds/7523883995776268529/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://volkansalma.blogspot.com/2009/04/minix3-maceras-1.html#comment-form" title="1 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21714815/posts/default/7523883995776268529?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21714815/posts/default/7523883995776268529?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VolkanSalma/~3/nKHJn0lK67A/minix3-maceras-1.html" title="minix3 macerası - 1" /><author><name>Volkan SALMA</name><uri>http://www.blogger.com/profile/02180507354820111978</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14549475684880173267" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_SIJeFqYV1lQ/SfL0k1MfzNI/AAAAAAAAAqQ/mqCFEePWm2A/s72-c/logo.gif" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://volkansalma.blogspot.com/2009/04/minix3-maceras-1.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQERHo7fyp7ImA9WxVVGUg.&quot;"><id>tag:blogger.com,1999:blog-21714815.post-2224848980308484168</id><published>2009-03-13T15:30:00.005+02:00</published><updated>2009-03-13T16:08:25.407+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-13T16:08:25.407+02:00</app:edited><title>x86 --&gt; MIPS Cross Derleme</title><content type="html">&lt;ul&gt;&lt;li&gt;MIPS RISC yapısına sahip bir mikroişlemci mimarisidir.Karşılaştırmak ne kadar uygun olur bilmiyorum ama  komut seti Intel x86 komut setine göre oldukça temiz ve basit. Bu tasarım avantajından dolayı üniversitelerdeki bilgisayar mimarisi derslerinde genellikle MIPS mimarisi okutulur.(&lt;a href="http://tr.wikipedia.org/wiki/MIPS_mimarisi"&gt;vikipedi&lt;/a&gt;). Benim yeni okulumda da öyle..&lt;/li&gt;&lt;/ul&gt;
&lt;ul&gt;&lt;li&gt;   Intel x86 işlemcili makinam üzerinde bir C kodunu derleyip MIPS assembly si elde etmem gerekiyordu. Gcc ile target mimari belirtilebildiğini biliyordum, deneyince bu kadar kolay olmadığını gördüm. Bu işlemi yapabilmek için gcc nin kaynak kodunu tekrardan özel parametrelerle derlemem gerekiyormuş. (ubuntu'da başarılı olamadım...)&lt;/li&gt;&lt;/ul&gt;
&lt;ul&gt;&lt;li&gt;    Daha sonra aramalarıma devam ederken princeton uni. den "lcc" isimli bir cross compiler buldum. (&lt;a href="http://www.cs.princeton.edu/software/lcc/"&gt;http://www.cs.princeton.edu/software/lcc/&lt;/a&gt;) Windows ve linux versiyonları mevcut. Ben windows versiyonunu kullandım. Gayet kullanışlı. MIPSR3000 için little endian ve big endian derleme yapabiliyor. (ALPHA, SPARC ve Intel x86 için de yapabiliyormuş.)&lt;/li&gt;&lt;/ul&gt;
&lt;ul&gt;&lt;li&gt;   Microsoft VC++ 4 embedded  da Microsoftun artık ücretsiz olarak dağıttığı çok değişik mimariler için derleme yapabileceğimiz bir araç. MIPS asm side üretiyor.
&lt;/li&gt;&lt;/ul&gt;
&lt;ul&gt;&lt;li&gt;*SPIM ide atlamayalım. MIPS32 assembly sini simule etmek için harika bir araç. Windows,Linux, Unix,MacOS altında çalışıyor. (&lt;a href="http://pages.cs.wisc.edu/%7Elarus/spim.html"&gt;http://pages.cs.wisc.edu/~larus/spim.html&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;http://volkansalma.blogspot.com&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21714815-2224848980308484168?l=volkansalma.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VolkanSalma/~4/Vz7Kxer_dQk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://volkansalma.blogspot.com/feeds/2224848980308484168/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://volkansalma.blogspot.com/2009/03/x86-mips-cross-derleme.html#comment-form" title="0 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21714815/posts/default/2224848980308484168?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21714815/posts/default/2224848980308484168?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VolkanSalma/~3/Vz7Kxer_dQk/x86-mips-cross-derleme.html" title="x86 --&gt; MIPS Cross Derleme" /><author><name>Volkan SALMA</name><uri>http://www.blogger.com/profile/02180507354820111978</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14549475684880173267" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://volkansalma.blogspot.com/2009/03/x86-mips-cross-derleme.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYCRXwyfSp7ImA9WxdWFkk.&quot;"><id>tag:blogger.com,1999:blog-21714815.post-590341908701203867</id><published>2008-07-10T00:36:00.002+03:00</published><updated>2008-07-10T00:49:24.295+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-10T00:49:24.295+03:00</app:edited><title>Dalgacık.</title><content type="html">&lt;ul&gt;&lt;li&gt;...Foton, kütlesi 0 olan; saniyede 300 000 km hızla giden en küçük dalga/parçacık tır. Gerçek cisim tanecikleri de ışık gibi aynı temele dayanıyor. Gezegenleri, yıldızları ve galaksileri oluşturan madde, enerji dalgalarından üretilen taneciklerdir.
&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Durağan görünen bedenimizin temelinde, sayısız foton süper hızla akış halindedir.&lt;span style="font-weight: bold;"&gt; Bedenimiz ışık hızında gerçekleşen bir dalga akışıdır.
&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Vücudumuz kuantum dalgalarından örülen taneciklerden, onlardan örülü atomlardan, onlardan örülü moleküllerden veonlardan örülü hücrelerden yapılmıştır. Işık hızında fotondan örülen tanecik yavaşlar; onlardan örülen atom daha da yavaşlar. Böylece örgü elementleri kayalara, kıtalara, gezegenlere, galaksilere ulaşır. &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Yerinde duruyor gibi görülen her madde, bedenin derinlerinde baş döndürücü titreşimleri, fırtınaları, uçuşmaları gizlemektedir.
&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Maddenin aslı, süper hızlı enerji dalgalarıdır.&lt;/span&gt; Madde aslında enerjidir; ama, ilginçtir ki enerjinin maddi vücudu yoktur. Sobanızda yaktığınız odunlar kül olup havaya uçar. Kütlesi enerjiye yani evinizdeki maddenin atomlarında yaşanan titreşimine/ısıya dönüşür.
&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Odun yanarak yok olur ; karşılığında sadece çevresindeki maddeleri titreştirir.
&lt;/li&gt;&lt;li&gt;... &lt;span style="font-weight: bold;"&gt;Evrenin tüm enerjisi vücutsuz bir zerreye sıkışabilir. &lt;/span&gt;
&lt;/li&gt;&lt;/ul&gt;

                                                                                                Dr. Muhammed Bozdağ. 2005&lt;div class="blogger-post-footer"&gt;http://volkansalma.blogspot.com&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21714815-590341908701203867?l=volkansalma.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VolkanSalma/~4/lNWVd-QGRqo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21714815/posts/default/590341908701203867?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21714815/posts/default/590341908701203867?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VolkanSalma/~3/lNWVd-QGRqo/dalgack.html" title="Dalgacık." /><author><name>Volkan SALMA</name><uri>http://www.blogger.com/profile/02180507354820111978</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14549475684880173267" /></author><feedburner:origLink>http://volkansalma.blogspot.com/2008/07/dalgack.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIHQHYyeip7ImA9WxdRF0g.&quot;"><id>tag:blogger.com,1999:blog-21714815.post-5726085893726117228</id><published>2008-06-06T16:04:00.001+03:00</published><updated>2008-06-06T16:05:31.892+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-06T16:05:31.892+03:00</app:edited><title>Anten Temel - 1 Empedans Uygunlaştırma</title><content type="html">&lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Anten teorisi finalini de atlattığımıza&amp;#160; g&amp;#246;re işin temel pratiğe d&amp;#246;n&amp;#252;k eğlenceli kısımları ile biraz ilgilenelim. Eski dergileri karıştırırken Circuit Cellar Şubat 2008 sayısında Antenna Technology 101 başlıklı bir yazı ile karşılaştım. Olduk&amp;#231;a g&amp;#252;zel bir makale. Bahsettiğim sayıyı ayrıca Elektronik m&amp;#252;h. ile alakalı onlarca se&amp;#231;me pdf e &lt;a href="http://ali-almukhtar.blogspot.com" target="_blank"&gt;buradan&lt;/a&gt; ulaşabilirsiniz.     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Şimdi biraz &amp;#231;eviri biraz yorum bazı kavramları a&amp;#231;ıklamaya &amp;#231;alışalım. &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; Empedans Uygunlaştırma: Empedans uygunlaştırma pek &amp;#231;ok elektronik uygulamada olduğu gibi anten sistemlerinde de temel kavramlardan biridir. Basit bir şekilde a&amp;#231;ıklayacak olursak; Pil ile &amp;#231;alışan bir diren&amp;#231;li ısıtıcımız olsun :) Bu ısıtıcımızın direnci ısıtıcıdan maksimum g&amp;#252;&amp;#231; alabilmek i&amp;#231;in acaba nasıl se&amp;#231;ilmelidir. &amp;#199;ok k&amp;#252;&amp;#231;&amp;#252;k bir diren&amp;#231; &amp;#252;zerinden &amp;#231;ok b&amp;#252;y&amp;#252;k bir akım ge&amp;#231;er ancak &amp;#252;zerinde d&amp;#252;şen gerilim az olacağından alabileceğimiz g&amp;#252;&amp;#231; V*I dan olduk&amp;#231;a k&amp;#252;&amp;#231;&amp;#252;k olacaktır. B&amp;#252;y&amp;#252;k bir diren&amp;#231; se&amp;#231;ildiğinde &amp;#252;zerinde g&amp;#252;şen gerilim olduk&amp;#231;a b&amp;#252;y&amp;#252;k olmasına rağmen akım k&amp;#252;&amp;#231;&amp;#252;lecek. En uygunu optimum noktada bir diren&amp;#231; se&amp;#231;mektir. B&amp;#246;yle bir uygulama i&amp;#231;in se&amp;#231;ilmesi gereken diren&amp;#231; pilimizin i&amp;#231; direncine eşit bir ısıtıcı direnci olmalıdır. Devre teorisi dersi alan arkadaşların maximum g&amp;#252;&amp;#231; transferi teoremi bunu ifade ediyor. &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; Yukarıda DC i&amp;#231;in a&amp;#231;ıkladığımız kurallar bazı değişikliklerle AC i&amp;#231;in de ge&amp;#231;erlidir. AC i&amp;#231;in empedans reel ohmik diren&amp;#231; ve imajiner reaktans şeklinde g&amp;#246;sterilir. Eğer devremiz kapasitif ise reaktans - değer ind&amp;#252;ktif ise + değerler alacaktır.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;Kaynak empedansımızı Zs = Rs + j Xs şeklinde g&amp;#246;sterebiliriz. Yukarıda DC ısıtıcı &amp;#246;rneğinde olduğu gibi bu şekilde bir kaynaktan maksimum g&amp;#252;c&amp;#252; transfer edebilmemiz i&amp;#231;in y&amp;#252;k&amp;#252;m&amp;#252;z&amp;#252;n empedansınında sadece ohmik kısımdan oluşmaması, sanal ksmının da olması gerekir. Değeri ise kaynak empedansının kompleks eşleniği şeklindedir.&amp;#160; Yani reaktans kısım ters işaretli olmalıdır. Kaynak end&amp;#252;ktif ise y&amp;#252;k kapasitif, kapasitif ise y&amp;#252;k end&amp;#252;ktif olmalıdır. Burada kaynağımızın kompleks bir değerde olduğunu bu şekilde en y&amp;#252;ksek g&amp;#252;c&amp;#252; alabilmek i&amp;#231;in bağlanabilecek y&amp;#252;k&amp;#252; belirledik fakat pratikte y&amp;#252;k&amp;#252;m&amp;#252;z ve kaynak sabit bir karakteristik g&amp;#246;sterir en uygun verimi alabilmek i&amp;#231;in bağlantı noktasında eşleştirme yaparız. End&amp;#252;ktif bir y&amp;#252;k i&amp;#231;in (&amp;#246;r motor) hatta bir karşı reaktans yani kapasite, kapasitif bir y&amp;#252;k i&amp;#231;in ise hatta bir end&amp;#252;ktans bağlayarak reaktif kısmı eşleştiririz. Ohmik kısım i&amp;#231;in ise genellikle empedans uygunlaştırıcı transformat&amp;#246;r kullanılır.&amp;#160; Bu işlem empedans uygunlaştırma oalrak bilinir. Anten sistemlerinde empedans frekansada bağlı olarak değiştiğinden alıancak veya yayın yapılacak frekansa uygun olarak dizayn yapılması da gereklidir.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160; İnşallah sonraki yazımızda bunları grafik &amp;#252;zerinde inceler ve temel anten kavramlarına devam ederiz. Belkide yazıların sonunda wireless ağlara uzaktan bağlanabileceğimiz bir el yapımı anten yaparız :) &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;http://volkansalma.blogspot.com&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21714815-5726085893726117228?l=volkansalma.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VolkanSalma/~4/IUY0vD3HXbQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://volkansalma.blogspot.com/feeds/5726085893726117228/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://volkansalma.blogspot.com/2008/06/anten-temel-1-empedans-uygunlatrma.html#comment-form" title="0 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21714815/posts/default/5726085893726117228?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21714815/posts/default/5726085893726117228?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VolkanSalma/~3/IUY0vD3HXbQ/anten-temel-1-empedans-uygunlatrma.html" title="Anten Temel - 1 Empedans Uygunlaştırma" /><author><name>Volkan SALMA</name><uri>http://www.blogger.com/profile/02180507354820111978</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14549475684880173267" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://volkansalma.blogspot.com/2008/06/anten-temel-1-empedans-uygunlatrma.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYGR309eCp7ImA9WxdXEkg.&quot;"><id>tag:blogger.com,1999:blog-21714815.post-6272503072366742501</id><published>2008-03-12T02:48:00.009+02:00</published><updated>2008-06-24T00:55:26.360+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-24T00:55:26.360+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programlama" /><category scheme="http://www.blogger.com/atom/ns#" term="C++" /><category scheme="http://www.blogger.com/atom/ns#" term="Curl" /><title>C++ ile curl e giriş.</title><content type="html">&lt;span&gt;Curl u uzun zamandır denemek istiyorum. Ancak bugün bir şeyler elde edebildim.

Konuya yabancı olanlar için  curl http requestler gönderebildiğimiz bir komut satırı programı. libCurl ise curl un platformdan bağımsız kütüphanesi. Çok daha güzel anlatımı ise şöyle :)

&lt;blockquote&gt;libcurl is a free and easy-to-use client-side URL transfer library, supporting FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS and FILE. libcurl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, cookies, user+password authentication (Basic, Digest, NTLM, Negotiate, Kerberos4), file transfer resume, http proxy tunneling and more!&lt;/blockquote&gt;
Aklıma gelen bazı uygulama alanları..
Console uygulamamızdan bir sayfadan veri çekebiliriz, kendi rss reader ımızı yazabiliriz. Mailimize login olup yeni ileti var mı kontrol edebiliriz.Programımızı weble ilişkilendirebiliz. Yazılım güvenliği konusunda kullanılabilir. Tabi yaramaz işlerde kullanmaya da oldukça uygun...

&lt;a href="http://curl.haxx.se/docs/copyright.html"&gt;Burada&lt;/a&gt; anlatıldığına göre MIT/X  türevi bir lisansa sahip. açık kaynak kodlu bir proje ticari uygulamalarda da gayet güzel kullanılabiliyor.

Yukarıda saydığım uygulamalar belki .net veya başka RAD(delphi, cbuilder, vb) ürünlerini kullanarak çok daha kolay şekilde gerçekleştirilebilir ama bildiğim kadarıyla kütüphane c/c++ ve php dünyasında pek yaygın.


&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;UYGULAMA&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt; Kütüphanenin resmi kaynağı  &lt;a href="http://curl.haxx.se/download.html"&gt;burası.&lt;/a&gt; Pek çok işletim sistemi için değişik opsiyonlarla derlenmiş kütüphane dosyaları bulunabilir. Ben ms vc++ 6 ile denediğim derleme denemelerimde başarılı olamadım. Hem de hazır proje dosyası şeklinde olmasına rağmen!! Uygulamanın pek çok bağımlılığı var  ve çoğu ağ teknolojileri ile alakalı benim yabancı olduğum konulular.

Sizde aynı durumdaysanız &lt;a href="http://my.guardpuppy.com/libcurl-7.15.1-msvc-win32-ssl-0.9.8a-zlib-1.2.3.zip"&gt;libcurl-7.15.1-msvc-win32-ssl-0.9.8a-zlib-1.2.3.zip&lt;/a&gt;
paketini önerebilirim. Paket içerisinde 32 bit win sistemler için derlenmiş ssl desteği sağlayan lib ve dll ler var.

Bunu uygun yere(benim sistemimde c:\curl) kaydettikten sonra derleyicimizde gerekli linker ve header directory ayarlarını yapmamız gerekiyor.

Bunlar Ms VC++ 6 için şöyle:

&lt;ul&gt;&lt;li&gt;-Project&gt;Settings&gt;Link&gt;Object/Library Modules e "libcurl.lib" ifadesini ekleyin.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;-Tools&gt;Options&gt;Directories&gt;Show Directory for Include Files seçili iken    C:\curl\include satırını ekleyin.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;-Tools&gt;Options&gt;Directories&gt;Show Directory for Library Files seçili iken  C:\curl\ satırını ekleyin.&lt;/li&gt;&lt;/ul&gt;
Diğer derleyicilerde de menüler benzer şekilde olacaktır.

Ayrıca c:/curl de libcurl_imp.lib dosyasını libcurl.lib yapıp curl klasorunde lib içine kaydetmeyi unutmayın.


Dll ler ise libcurl.dll ssleay32.dll zlib1.dll libeay32.dll bunlarıda uygulamamızın exesinin bulunduğu klasore kopyalayın.


&lt;a href="http://curl.haxx.se/lxr/source/docs/examples/simple.c"&gt;simple.c&lt;/a&gt; Burada örnek bir uygulama var. İlk önce bu kodu denemenizi tavsiye ederim. Yaptığınız ayarlarla bu programı derlediğinizde haxx.se adresini bir http request gönderilecek ve gelen yanıt console ekranınıza yansıyacaktır.


&lt;a href="http://curl.haxx.se/lxr/source/docs/examples/"&gt;http://curl.haxx.se/lxr/source/docs/examples/&lt;/a&gt;
Adresinde daha gelişmiş uygulamalar bulunmakta.


Kütüphane oldukça kullanışlı ve kolay. Hiç deneyimim olmamasına rağmen bir saat kadar bir süre içinde okulumuz öğrenci sistemine programla login olabildim. Belki bir sonraki yazıya konu olabilir. :)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;http://volkansalma.blogspot.com&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21714815-6272503072366742501?l=volkansalma.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VolkanSalma/~4/C4cySCKccwc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://volkansalma.blogspot.com/feeds/6272503072366742501/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://volkansalma.blogspot.com/2008/03/c-ile-curl-e-giri.html#comment-form" title="3 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21714815/posts/default/6272503072366742501?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21714815/posts/default/6272503072366742501?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VolkanSalma/~3/C4cySCKccwc/c-ile-curl-e-giri.html" title="C++ ile curl e giriş." /><author><name>Volkan SALMA</name><uri>http://www.blogger.com/profile/02180507354820111978</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14549475684880173267" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://volkansalma.blogspot.com/2008/03/c-ile-curl-e-giri.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AMSX07fCp7ImA9WxZXEkk.&quot;"><id>tag:blogger.com,1999:blog-21714815.post-4406282558138726802</id><published>2008-02-29T02:43:00.014+02:00</published><updated>2008-02-29T03:49:48.304+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-29T03:49:48.304+02:00</app:edited><title>Bismillah..</title><content type="html">&lt;blockquote&gt;...&lt;/blockquote&gt;
&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;Besmele ile başlanmayan her önemli iş noksan kalır.&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;Besmele ile yazı yazanın haceti kolaylaşır, Allahü teâlâ da razı olur.&lt;/span&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;http://volkansalma.blogspot.com&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21714815-4406282558138726802?l=volkansalma.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VolkanSalma/~4/6zhmME6TzrI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://volkansalma.blogspot.com/feeds/4406282558138726802/comments/default" title="Kayıt Yorumları" /><link rel="replies" type="text/html" href="http://volkansalma.blogspot.com/2008/02/deneme.html#comment-form" title="4 Yorum" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21714815/posts/default/4406282558138726802?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21714815/posts/default/4406282558138726802?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VolkanSalma/~3/6zhmME6TzrI/deneme.html" title="Bismillah.." /><author><name>Volkan SALMA</name><uri>http://www.blogger.com/profile/02180507354820111978</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14549475684880173267" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://volkansalma.blogspot.com/2008/02/deneme.html</feedburner:origLink></entry></feed>
