Åèíéêü êáé Êáðïäéóôñéáêü ÐáíåðéóôÞìéï Áèçíþí Ó ïëþ Èåôéêþí Åðéóôçìþí Äéáôìçìáôéêü Ìåôáðôõ éáêü Çëåêôñïíéêïý Áõôïìáôéóìïý ËÏÃÉÊÏÓ ÐÑÏÃÑÁÌÌÁÔÉÓÌÏÓ Õëïðïßçóç õðçñåóßáò óõíïéêåóßùí óôçí ãëþóóá Prolog ÖïéôçôÝò: Âáóßëåéïò Êáñáãåþñãïò Ìåôáðôõ éáêü: ÌÐËÁ Á.Ì.: 200609 Íßêïò Óðýñïõ Ìåôáðôõ éáêü: ÇÁ Á.Ì.: 2006528
1 ÅéóáãùãÞ Óêïðüò ôçò Üóêçóçò åßíáé ç õëïðïßçóç åíüò ðñïãñüììáôïò óå Prolog ôï ïðïßï èá âñßóêåé ôï êáôüëëçëï ôáßñé ãéá êüèå ðåëüôç ðïõ ñçóéìïðïéåß ôçí õðçñåóßá. Ç åðéëïãþ ãßíåôáé áðü ìéá âüóç äåäïìýíùí ðïõ ðåñéý åé êáôá ùñþóåéò ãéá üëïõò ôïõò ðåëüôåò ôçò õðçñåóßáò. ÊÜèå êáôá þñçóç ðåñéý åé ðñïóùðéêü óôïé åßá ãéá ôïí ðåëüôç üðùò ôï ïíïìáôåðþíõìï, ôï æþäéï ôïõ, ôçí çëéêßá ôïõ êáé Üëëá. Ç åýñåóç ôïõ êáôüëëçëïõ óõíôñüöïõ ãßíåôáé ìå âüóç ôá óôïé åßá ðïõ æçôü ï ñþóôçò êáé ôï ðñüãñáììá áðïöáóßæåé áíüëïãá ìå ôçí óõìâáôüôçôá ôùí áñáêôçñéóôéêþí äýï áíèñþðùí áí ôï óõíïéêýóéï ìåôáîý ôïõò èá åßíáé åðéôõ Ýò. 2 Ç ÂÜóç ÄåäïìÝíùí Ç âüóç äåäïìýíùí ( ôï áñ åßï matchdata.pl ) ðåñéý åé Ýíá êáôçãüñçìá ãéá êüèå ðåëüôç ôçò õðçñåóßáò. Áõôü ôï êáôçãüñçìá Ý åé ôçí åîþò ìïñöþ person(nickname; name; surname; sex; hair; eyes; race; age; zodiac sign; education; income; smoker; height; weight) Ç âüóç ðåñéý åé 100 random generated êáôá ùñþóåéò ðïõ äçìéïõñãþèçêáí ìå Ýíá Python ðñüãñáììá ( ôï áñ åßï makedata.py ðåñéý åé áõôüí ôïí êþäéêá ). Ëüãù ôïõ üôé ïé êáôá ùñþóåéò äçìéïõñãþèçêáí ôõ áßá, ôá ïíüìáôá ôùí ðåëáôþí åßíáé ôçò ìïñöþò man1, woman1, êôë. Óôïí ðáñáêüôù ðßíáêá öáßíïíôáé ôá ðéèáíü áñáêôçñéóôéêü åíüò ðåëüôç. Ç ó åôéêýò ðéèáíüôçôåò åðéëïãþò ìåôáîý áñáêôçñéóôéêþí âñßóêïíôáé ìýóá óå ðáñåíèýóåéò üðïõ ç êáôáíïìþ äåí åßíáé ïìïéüìïñöç, åêôüò êáé áí áíáöýñåôáé êüôé äéáöïñåôéêü. ÐáñÜìåôñïò ÄõíáôÝò ÔéìÝò Sex (öýëï) Male, female (2:3) Hair ( ñþìá ìáëëéþí) Black, blonde, brown, red (3:2:2:1) Eyes ( ñþìá ìáôéþí) Black, blue, brown, green (3:2:3:1) Race (öõëþ) Caucasian, asian, african american, semite Sexual orientation (óåîïõáëéêýò ðñïôéìþóåéò) Heterosexual, homosexual, bisexual (5:1:1) Zodiac sign (æþäéï) Aries, sagittarius, taurus, virgo, capricorn, cancer, scorpio, pisces, gemini, libra, aquarius, leo Education (ìüñöùóç) Elementary, highschool, college (1:3:2) Income (åéóüäçìá) Low, lower middle, upper middle, high (3:2:2:1) Smoking (êáðíéóôþò) Yes, no (1:3) Height (ýøïò) ÃêáïõóéáíÞ êáôáíïìþ ìå ì=1,70m, ó=0,2 ãéá ôïõò Üíôñåò êáé ì=1,60m, ó=0,1 ãéá ôéò ãõíáßêåò Weight (âüñïò) ÃêáïõóéáíÞ êáôáíïìþ ìå ì=80kg, ó=20 ãéá ôïõò Üíôñåò êáé ì=60kg, ó=15 ãéá ôéò ãõíáßêåò 1
Ïé êáôá ùñþóåéò ðïõ äçìéïõñãïýíôáé Ý ïõí ôçí åîþò ìïñöþ person(man1; man1; man1; sex(male); orientation(hetero); hair(red); eyes(brown); race(asian); age(22); sign(pisces); education(college); income(lower middle); smoker(no); height(1:6); weight(83:85)) Åðßóçò ãéá êüèå ðåëüôç êáôá ùñïýíôáé óå îå ùñéóôü êáôçãïñþìáôá êáé ôá hobby ôïõ ìå ôçí åîþò ìïñöþ hobby(nickname; activity; rating) Óå êüèå êáôçãüñçìá hobby êáôáãñüöåôáé ôï øåõäþíõìï ôïõ ðåëüôç, ôï üíïìá ôçò äñáóôçñéüôçôáò êáé ôï ðüóï óçìáíôéêþ åßíáé áõôþ ôïõ ç åíáó üëçóç. Ï âáèìüò ãéá êüèå hobby êõìáßíåôáé áðü 1 Ýùò 10, üðïõ ôï 1 óçìáßíåé üôé áðïóôñýöåôáé ôçí óõãêåêñéìýíç åíáó üëçóç åíþ ôï 10 üôé ôçí ëáôñåýåé. ÊÜèå ðåëüôçò ìðïñåß íá êáôá ùñþóåé üóá åíäéáöýñïíôá åðéèõìåß. Ôá hobbies ðïõ Ý ïõí ðåñéëçöèåß óôçí óõãêåêñéìýíç âüóç åßíáé ôá åîþò: music, dancing, reading, cinema, chess, martial arts, painting, gaming, programming, skating, gymnastics, hiking, jogging, ballet, golf, miniatures, traveling, sculpting, cooking íá ðáñüäåéãìá áðü ôçí âüóç äåäïìýíùí öáßíåôáé ðáñáêüôù: hobby(man1,jogging,3). hobby(man1,music,6). hobby(man1,music,10). hobby(man1,dancing,2). hobby(man1,skating,6). hobby(man1,golf,2). hobby(man1,golf,10). hobby(man1,jogging,2). hobby(man1,programming,6). hobby(man1,music,1). hobby(man1,golf,2). hobby(man1,skating,8). hobby(man1,miniatures,10). Ãéá íá äçìéïõñãþóïõìå ìéá êáéíïýñéá âüóç äåäïìýíùí ôñý ïõìå óôï êýëõöïò ôï ðñüãñáììá run ùò åîþò: 2
ÔñÝ ïíôáò áõôü ôï ðñüãñáììá äçìéïõñãïýíôáé äýï áñ åßá. Ôï Ýíá åßíáé ç âüóç äåäïìýíùí (matchdata.pl) ôçí ïðïßá ñçóéìïðïéåß ôï êõñßùò ðñüãñáììá êáé ôï Üëëï åßíáé ôï all.out, Ýíá text le ôï ïðïßï ðåñéý åé üëïõò ôïõò äõíáôïýò óõíäõáóìïýò ðïõ ðñïêýðôïõí ìåôáîý ôùí ðåëáôþí. 3
3 Ï Prolog êþäéêáò 3.1 ÂïçèçôéêÜ ÊáôçãïñÞìáôá ˆ To êáôçãüñçìá orientscore áîéïëïãåß ôçí óõìâáôüôçôá ôùí óåîïõáëéêþí ðñïôéìþóåùí äýï áíèñþðùí. orientscore(sex1, orientation1, sex2, orientation2, rating) Ïé åôåñïöõëüöéëïé êáé ïé ïìïöõëüöéëïé ôïõ ßäéïõ öýëïõ äßíïõí âáèìü 1 ï ïðïßïò äåí åðéññåüæåé ôçí ôåëéêþ áîéïëüãçóç åíüò óõíïéêåóßïõ. Óôçí ðåñßðôùóç ôáéñéüóìáôïò åôåñïöõëüöéëïõ ìå áìöéóåîïõáëéêü ï âáèìüò åßíáé 0,6 åðéññåüæïíôáò Ýôóé áñíçôéêü ôçí ôåëéêþ áîéïëüãçóç. ¼ëïé ïé õðüëïéðïé óõíäõáóìïß äßíïõí âáèìü 0 ï ïðïßïò áðïêëåßåé ôï ìåôáîý ôïõò ôáßñéáóìá. ˆ Ôï êáôçãüñçìá agescore áîéïëïãåß ôçí óõìâáôüôçôá äýï áíèñþðùí ìå âüóç ôçí äéáöïñü çëéêßáò ðïõ Ý ïõí êáé ôï öýëï ôïõò. agescore(sex1, age1, sex2, age2, rating) Ãéá ôá æåõãüñéá ïìïöõëüöéëùí èåùñåßôáé éäáíéêþ ðåñßðôùóç íá Ý ïõí ôçí ßäéá çëéêßá. Ãéá ôá æåõãüñéá åôåñïöõëüöéëùí, éäáíéêþ äéáöïñü çëéêßáò èåùñïýíôáé ôá 14 ñüíéá, êáôü ôá ëåãüìåíá ôïõ Çñïäüôïõ, áëëü êáé óýìöùíá ìå óýã ñïíåò Ýñåõíåò ðïõ õðïóôçñßæïõí ôçí åðéëïãþ áõôþ 1. ¼ôáí ç äéáöïñü çëéêßáò áðïêëßíåé áðü ôçí éäáíéêþ ôüôå ç âáèìïëïãßá ìåéþíåôáé åðéññåüæïíôáò áñíçôéêü ôçí ôåëéêþ áîéïëüãçóç. ˆ Ôï êáôçãüñçìá eduscore áîéïëïãåß ôçí äéáöïñü óôçí ìüñöùóç äýï áíèñþðùí. eduscore(education1, education2) ÄéáöïñÜ ìéáò âáèìßäáò óôçí ìüñöùóç äßíåé âáèìü 0,9, äéáöïñü äýï âáèìßäùí (ð.. äçìïôéêü ìå ðáíåðéóôþìéï) äßíåé âáèìü 0,6 åíþ áí ôï åðßðåäï ìüñöùóçò åßíáé ôï ßäéï êáé ãéá ôïõò äýï ôüôå ï âáèìüò åßíáé 1. ˆ Ôá êáôçãïñþìáôá score1 êáé score2 õðïëïãßæïõí ôïí âáèìü óõìâáôüôçôáò ôùí åíäéáöåñüíôùí äýï áíèñþðùí Ðéï óõãêåêñéìýíá, ôï score2 åðéóôñýöåé Ýíáí âáèìü ùò ìýôñï ìç ãñáììéêþò \áðüóôáóçò" ãéá êüèå êïéíü åíäéáöýñïí, åíþ ôï score1 êáíïíéêïðïéåß ôï áðïôýëåóìá ôïõ score2. ˆ Ôï êáôçãüñçìá sumlist õðïëïãßæåé ôï Üèñïéóìá ôùí óôïé åßùí ìéáò ëßóôáò ˆ Ôï êáôçãüñçìá zmatch áîéïëïãåß ôçí óõìâáôüôçôá äýï æùäßùí ìå âüóç Ýíáí áóôñïëïãéêü ðßíáêá. zmatch(sign1, sign2, rating) O âáèìüò ìðïñåß íá åßíáé 0 (óõíþèùò ãéá ôá ßäéá æþäéá, äåí åðéññåüæåé ôï ôåëéêü áðïôýëåóìá), 1 (êáëüò óõíäõáóìüò, åðéññåüæåé èåôéêü ôï ôåëéêü áðïôýëåóìá) Þ -1 (êáêüò óõíäõáóìüò, åðéññåüæåé áñíçôéêü ôï ôåëéêü áðïôýëåóìá). Áêïëïõèåß ï ðßíáêáò ôùí äõíáôþí óõíäõáóìþí. 1 Biol Lett. 2007 Dec 4; : 18055408 (P,S,G,E,B,D) Samuli Helle, Virpi Lummaa, Jukka Jokela, Marrying women 15 years younger maximized men's evolutionary tness in historical Sami. 4
Aries Sagittarius Taurus Virgo Capricorn Cancer Scorpio Pisces Gemini Libra Aquarius Leo Aries 0 1-1 -1-1 -1-1 -1 1 0 1 1 Sagittarius 1 0-1 1-1 -1-1 -1 0 1 1 1 Taurus 1-1 0 1 1 1 0 1-1 -1-1 -1 Virgo 1 1 1 0 1 1 1 0-1 -1-1 -1 Capricorn 1-1 1 1 0 0 1 1-1 -1-1 -1 Cancer 1-1 1 1 0 0 1 1-1 -1-1 -1 Scorpio 1-1 0 1 1 1 0 1-1 -1-1 -1 Pisces 1-1 1 0 1 1 1 0-1 -1-1 -1 Gemini 1 0-1 -1-1 -1-1 -1 0 1 1 1 Libra 0 1-1 -1-1 -1-1 -1 1 0 1 1 Aquarius 1 1-1 -1-1 -1-1 -1 1 1 0 0 Leo 1 1-1 -1-1 -1-1 -1 1 1 0 0 5
ˆ To êáôçãüñçìá score áîéïëïãåß ìå Ýíáí âáèìü ôï ðüóï ðïëý ôáéñéüæïõí äýï Üíèñùðïé. score(p1,p2,r):- bagof(s,score1(p1,p2,s),l), sumlist(l,r1), person(p1,,,sex1,orient1,,,,age1,z1,edu1,,smoker1,, ), person(p2,,,sex2,orient2,,,,age2,z2,edu2,,smoker2,, ), zmatch(z1,z2,rz), Smoker1=Smoker2, eduscore(edu1,edu2,re), orientscore(sex1,orient1,sex2,orient2,ro), agescore(sex1,age1,sex2,age2,ra), R is Re*Ra*Ro*(R1+Rz*R1/10). Ãéá ôçí ôåëéêþ âáèìïëïãßá ñçóéìïðïéïýíôáé ôá áðïôåëýóìáôá ôùí ðñïçãïýìåíùí åðéìýñïõò áîéïëïãþóåùí (zmatch, eduscore, score1, orientscore êáé agescore) ãéá íá õðïëïãéóôåß ç óõíïëéêþ âáèìïëïãßá ðïõ áðïäßäåôáé óå êüèå óõíïéêýóéï. Åðéóçìáßíåôáé üôé êüðïéá áðü ôá åðéìýñïõò áðïôåëýóìáôá ñçóéìïðïéïýíôáé ùò ðïëëáðëáóéáóôéêïß ðáñüãïíôåò, åíþ Üëëá, üðùò ôïõ \zmatch", ùò ðñïóèåôéêïß. Åðßóçò ôï óõãêåêñéìýíï êáôçãüñçìá åëýã åé ôï êáôü ðüóïí ïé ðåëüôåò ðïõ óõãêñßíåé åßíáé áìöüôåñïé êáðíéóôýò Þ ìç (Smoker1=Smoker2). 3.2 Åýñåóç êáé áîéïëüãçóç óõíïéêåóßùí Ôï êáôçãüñçìá ðïõ áíáëáìâüíåé íá âñåé ôïõò êáôüëëçëïõò áíèñþðïõò ãéá êüèå ðåëüôç åßíáé ôï \match". match(requestor; sex(sex); orientation(orientation); hair(hair); eyes(eyes); race(race); age(age); sign(zodiac); education(education); income(income); height(height); weight(w eight); R) : person(nickname; Name; Surname; sex(sex); orientation(orientation); hair(hair); eyes(eyes); race(race); age(age); sign(zodiac); education(education); income(income); ; height(height); weight(w eight)); score(requestor; Nickname; Score); T riggeris1=(1 + exp( 1 Score)); T rigger > 0:6; not(requestor = Nickname); matchval(t rigger; Matchtype); R = [Matchtype; score(t rigger); nickname(nickname); name(name); surname(surname); sex(sex); orientation(orientation); hair(hair); eyes(eyes); race(race); age(age); sign(zodiac); education(education); income(income); height(height); weight(w eight)]: Ï åêüóôïôå ðåëüôçò èýôåé óáí ïñßóìáôá óôçí match ðñþôá ôï øåõäþíõìï ìå ôï ïðïßï åßíáé êáôá ùñçìýíïò óôçí âüóç êáé ìåôü ôï öýëï, ôéò óåîïõáëéêýò ðñïôéìþóåéò, ôï ñþìá ìáëëéþí, ôï ñþìá ìáôéþí, ôçí çëéêßá, ôï æþäéï, ôï åéóüäçìá, ôçí ìüñöùóç, ôï ýøïò êáé ôï âüñïò ðïõ åðéèõìåß íá Ý åé ï óýíôñïöïò ôïõ. Óôç èýóç ôùí óôïé åßùí ðïõ äåí ôïí åíäéáöýñïõí ìðïñåß íá âüëåé ìéá ôõ áßá ìåôáâëçôþ þóôå íá åëåã èïýí üëïé ïé äõíáôïß óõíäõáóìïß óôç âüóç äåäïìýíùí. Ôá áðïôåëýóìáôá ðïõ åðéóôñýöïíôáé áñáêôçñßæïíôáé áðü ìéá óõíïëéêþ âáèìïëïãßá ç ïðïßá õðïëïãßæåôáé áðü ôï áðïôýëåóìá ôïõ \score1" ìýóù ìéáò sigmoid function ìå êáôþöëé áðïêïðþò, óå ìéá ðñïóðüèåéá ìßìçóçò ôùí ðñáêôéêþí ðïõ åöáñìüæïíôáé óôá íåõñùíéêü äßêôõá. Áõôüò åßíáé êáé ï ëüãïò ðïõ åðéëý èçêå ìç ãñáììéêü ìýôñï áðüóôáóçò óôï êáôçãüñçìá \score1". Ãéá ðáñüäåéãìá, Ýóôù üôé ï ðåëüôçò man43 åðéèõìåß íá âñåé ìéá ãõíáßêá ìå ìáýñá ìáëëéü, ìðëå ìüôéá êáé æõãü óôï æþäéï. Ôüôå ç åíôïëþ ðïõ ðñýðåé íá äþóåé óôï ðñüãñáììá åßíáé 6
?- match(man43, X, OR, hair(black), eyes(blue), RC, AGE, sign(aries), ED, INC, H, W, Result). Êáé ôá áðïôåëýóìáôá ðïõ èá Ýðáéñíå åßíáé ôá åîþò Client Code = woman3 Name = woman3 Surname = woman3 { Sex = female Hair Colour = black Eyes = blue Age = 33 Zodiac Sign = aries Height = 1.57 Weight = 57.56 { Your match with this person is bad X = sex(female), OR = orientation(hetero), RC = race(asian), AGE = age(33), ED = education(highschool), INC = income(upper middle), H = height(1.57), W = weight(57.56), Result = [bad, score(0.699629), nickname(woman3), name(woman3), surname(woman3), sex(female), hair(black), eyes(: : :) : : :] ; Ôï áðïôýëåóìá Result ðïõ åðéóôñýöåé ôï ðñüãñáììá îåêéíü ìå Ýíáí ðïéïôéêü áñáêôçñéóìü ôïõ óõíïéêåóßïõ ï ïðïßïò Ý åé ôéò åîþò äéáâáèìßóåéò : bad, poor, fair, good, excellent. Áõôüò ï áñáêôçñéóìüò åîáñôüôáé áðü ôçí óõíïëéêþ âáèìïëïãßá ôïõ æåýãïõò. Ç âáèìïëïãßá áõôþ êõìáßíåôáé áðü 0 Ýùò 1 êáé äåêôü ãßíïíôáé ôá æåýãç ôùí ïðïßùí ç âáèìïëïãßá åßíáé ðüíù áðü 0,6. 7
4 Åðßëïãïò Óõãêñßíïíôáò êáíåßò ôçí óõãêåêñéìýíç õëïðïßçóç ìå ìéá áíôßóôïé ç õëïðïßçóç óå êüðïéá ôõðéêþ ãñáììéêþ ãëþóóá ðñïãñáììáôéóìïý, ìðïñåß åýêïëá íá ðåé üôé ç Prolog åíäåßêíõôáé ãéá ôçí êáôáóêåõþ ôýôïéïõ åßäïõò ðñïãñáììüôùí, üðùò åßíáé ôá ðñïãñüììáôá áðüöáóçò êáé áíáæþôçóçò. Óå ìéá ãëþóóá üðùò ç C Þ ç Pascal, ôï ðñüãñáììá áõôü èá Þôáí ãåìüôï áðü \if" clauses, êáé Üñá äõóáíüãíùóôï êáé êïõñáóôéêü. Åðßóçò, ï ðñïãñáììáôéóôþò èá Ýðñåðå íá õëïðïéþóåé ôéò äéêýò ôïõ ñïõôßíåò áíáæþôçóçò êüôé ôï ïðïßï èá áðáéôïýóå åîý ïíôá êüðï ãéá íá ðëçóéüóåé óå áðüäïóç áõôýò ôùí óõíþèùí õëïðïéþóåùí ôçò Prolog. ÔÝëïò, áðü ôçí ìåëýôç ôçò óôáôéóôéêþò ôùí áðïôåëåóìüôùí ãéá ðïëëýò åêôåëýóåéò åðß ôõ áßùí äåäïìýíùí, ìðïñåß êáíåßò íá áðïöáíèåß üôé ç óõãêåêñéìýíç õëïðïßçóç ðáñüãåé óå ðñþôï åðßðåäï ìéá ñåáëéóôéêþ åéêüíá. Óôï ðáñáêüôù äéüãñáììá öáßíåôáé ìéá ôõðéêþ êáôáíïìþ áðïôåëåóìüôùí ÂëÝðïõìå üôé ôï ðëþèïò ôùí æåõãþí ìåéþíåôáé óçìáíôéêü êáèþò áõîüíåôáé ç ðïéüôçôá ôïõ ôáéñéüóìáôïò, åíþ óôéò \ãêñßæåò" æþíåò (fair,good) Ý ïõìå Ýíá ïñïðýäéï. Áêüìá ç óõíôñéðôéêþ ðëåéïøçößá ôùí æåõãþí (c. 80%) êñßíåôáé áóýìâáôç êáé ðáñáëåßðåôáé áðü ôï äéüãñáììá. Ðñïöáíþò, ç åéêüíá áõôþ åîáñôüôáé óå ðïëý óçìáíôéêü âáèìü áðü ôçí åðéëïãþ ôùí ðáñáìýôñùí/óôáèåñþí óôïõò êáíüíåò áîéïëüãçóçò. Ç ôñý ïõóá åðéëïãþ Ý åé ãßíåé ìåôü áðü ðïëëýò äïêéìýò êáé åðáíåêôéìþóåéò (trial-and-error) óôá ðëáßóéá ìéáò äéáäéêáóßáò \åêìüèçóçò õðï êáèïäþãçóç". 8