Алгоритм Facemash

Кто-нибудь знает алгоритм facemash, который Марк Цукерберг реализовал на своем сайте facemash? http://www.thecrimson.com/article/2003/11/19/facemash-creator-survives-ad-board-the/

Предпочтительно в PHP и MySQL.

Solutions Collecting From Web of "Алгоритм Facemash"

Я не знаю, какой алгоритм фактически использовался для сайта реального мира, но то, что они пишут в окне в фильме, основано на рейтинговой системе Elo , которая возникла в мире шахмат и теперь также используется во многих других играх ,

введите описание изображения здесь

ОБНОВИТЬ:

Как я уже сказал в комментариях, я добавил этот алжирм на мой новый сайт. Сначала это работало отлично. Но после некоторых странных входов начался какой-то странный результат.

Во время отладки я выяснил, что я делаю неправильно. При получении оценки для «прямых отношений» (используемой в косвенной связи) между двумя узлами я добавил оценки вместе. Это было неправильно, оценка прямой связи должна быть выражена в -1 до +1, где:

-1 = lost everything +1 = won everything 

Так что, если A выиграл 8 раз до B, а B выиграл 2 раза до A, оценка должна быть:

 (A wins) 8 + (B wins) 2 = (total matches)10 (delta of -1 and +1 =) 2 / (total matches)10 = (points per win) 0.2 Score of A vs B = (points per win) 0.2 * (wins) 8 - 1 = 0.6 Score of B vs A = (points per win) 0.2 * (wins) 2 - 1 = -0.4 

Также я не упоминал об этом в оригинальном объяснении, но все это касается треугольников. Поэтому, когда мы смотрим на косвенный счет, вам не нужно идти дальше 1-го прыжка.

Я воссоздал его и проверил. Не уверен в php, но класс C #

http://lukedurrant.com/2010/11/c-elo-rating-class-used-on-facemash-as-seen-in-the-social-network-movie/

Я использовал его на своем

Facemash

Код нажатия клавиши

 $(document).keydown(function(event) { if (event.keyCode == 37) { //Voted Face 1 Rate("face1", false); } if(event.keyCode == 39) { //Voted Face 2 Rate("face2", false); } }); 
  <?php //This page is responsible to return a JSON object //code starts after the functions for those who might get confused xD header('content-type: application/json; charset=utf-8'); global $responseData; function AdjustRate($Ra, $Ea, $Sa) { //i used my own rules here 32 points for less than 500 if($Ra < 500) $k = 32; elseif ($Ra < 1000)//24 points for anything between 500 and 1000 $k = 24; else $k = 16;//16 for anything more than 1000 return $Ra + ($k*($Sa - $Ea)); } function GetExpectedChance($rA, $rB) // the ELO formula taken from http://en.wikipedia.org/wiki/Elo_rating_system { return (1/(1+pow(10,(($rB-$rA)/400)))); } function setNewRates($lastCall) // function I used to update my database tables { global $responseData; $A = $lastCall->p1; $B = $lastCall->p2; $C = $lastCall->c; $A->E = GetExpectedChance($A->rate, $B->rate); $B->E = GetExpectedChance($B->rate, $A->rate); // decide who won and who lost if($A->id == $C){ $winner = $A; $looser = $B; } elseif ($B->id == $C) { $winner = $B; $looser = $A; } // 3 cases, in all of them winner will get his rate/hits increased by 1 //Case #1: normal case we just update rate/hits for the winner, this applies all the time $winner->rate += 1; $winner->hits += 1; //Case #2 / #3 : here we should adjust the rate after applying case #1 // if he won while he is expected to lose OR if he lost while expected to win // there should be minimum rate different of 40 between the two $diff = abs($winner->rate - $looser->rate); if($diff >= 40 && ($winner->E < 0.5 || $looser->E >= 0.5)) { $winner->rate = AdjustRate($winner->rate, $winner->E, 1); $looser->rate = AdjustRate($looser->rate, $looser->E, 0); } // update the db to update rates, hits for both winner and looser $updateQuery = 'UPDATE user SET rate='.$winner->rate.',hits='.$winner->hits.' WHERE id=' . $winner->id; mysql_query($updateQuery); $updateQuery = 'UPDATE user SET rate='.$looser->rate.' WHERE id=' . $looser->id; mysql_query($updateQuery); // Save to responsedate $responseData->winner = $winner; $responseData->looser = $looser; } //CODE STARTS HERE :) // Setup the mysql connection include 'db.php'; // Part 1: calculate the rate and save to db, if we have a lastcall // GET the last call data object, it has p1, p2, c, these are the items i recieved from my javascript ajax call $lastCall = json_decode((string)$_GET['lastCall']); // it was a JSON object so i need to decode it first // Save last call data, will be sent with the respond as well $responseData->lastCall = $lastCall; // if there is a json object, means that there was a rating process and I have to set the new rates if($lastCall->c != NULL) { setNewRates($responseData->lastCall); } // Part 3: Select new persons and addthem to our responseData $q = Array(); $q[0] = 'SELECT id, name, sex, rate, hits FROM user WHERE fm_status=1 AND sex="female" ORDER BY RAND() LIMIT 2'; $q[1] = 'SELECT id, name, sex, rate, hits FROM user WHERE fm_status=1 AND sex="male" ORDER BY RAND() LIMIT 2'; // girls or boys ? srand(mktime()); $query = $q[array_rand($q)]; $result1 = QueryIntoArray($query); $responseData->user = $result1; // Part 4: encode to JSON/JSONP string then respond to the call $json = json_encode($responseData); $json = isset($_GET['callback'])? "{$_GET['callback']}($json)" : $json; echo $json; mysql_close(); // by Noor Syron :) //I used this in my www.mimm.me ?> 

«Я разработал код в Perl, все из поиска google, и он работает.

Вот это

 use strict; use warnings; use WWW::Mechanize; use LWP::Simple; sub images() { my $mech = WWW::Mechanize->new(); my ($site,$count,$file,$dir); print "\t\t\tDesigned By NUMWARZ GAMING\n\n"; print "Enter the name of the site you want to search for images\t:\n"; $site = <STDIN>; print "Enter the folder where you want to save this\t:\n"; $dir = <STDIN>; open my $doc, ">" , $dir."sitelist.txt"; $mech->get( $site); my @links = $mech->images(); $count = 0; for my $link ( @links ) { $file = $dir.$count.".jpg"; mirror($link->url,$file); print $file," : "$link->url,"\n"; print $doc $link->url." ".$file."\n"; $count+=1; } close $doc; exit; } images(); 

Нет, не здесь нигде в Интернете. Исходный код Facemash никогда не публиковался. Единственный, у кого еще может быть экземпляр, – сам Марк Цукерберг .

здесь есть клон facemash http://www.facemash.99k.org

Я также воссоздал его, но в плагине WordPress

http://pofornot.com/

http://codecanyon.net/item/pics-mash-image-rating-tool/3256459?ref=mikemayhem3030