You are on page 1of 38

Bo co bi tp cho project I Bi ton xp x nghim cho h phng trnh

Gio vin hng dn: Trn nh Khang Sinh vin thc hin: Mai Tin Khi-lp KSTN-CNTT K55 L Thi Hng-lp KSTN-CNTT K55

Mc Lc

Phn I Gii thiu bi ton -------------------------------------------- 3 Phn II Tip cn bi ton----------------------------------------------4 Phn III Gii bi ton -------------------------------------------------5 Phn IV Cc class chnh cu chng trnh -----------------------14 Phn V Hng dn x dng giao din----------------------------33 Phn VI Mt s kt qu test-----------------------------------------35

Phn I Gii thiu bi ton


1.1 Bi ton ton x l Lp trnh mt chng trnh tnh xp x nghim ca mt h cc phng trnh do ngi dng nhp vo. Phng trnh ngi dng nhp vo l cc hm gii tch c bn: sin, cos, m log yu cu c giao din cho php ngi dng nhp vo phng trnh theo mt c php no t xy dng v hin ra kt qu tnh c. 1.2 Ngn ng lp trnh: java 1.3 Thut ton s dng: gii thut di truyn

Phn II Tip cn bi ton


2.1 phn tch yu cu bi ton - Input: mt h gm cc phng trnh nhp vo t bn phm hoc c t mt file, vi cc khong tm kim nghim c cho trc. - Output: ch ra nghim m gn ng vi nghim ca h phng trnh 2.2 Phn chia bi ton thnh cc module Bi ton c th chia lm cc module nh sau : - Cc cng vic phc v cho thut ton + Module x l c bi ton: bao gm kim tra tnh ng n ca phng trnh nhp vo, xc nh tn, khong gi tr gi tr ca cc bin v cc phng trnh. + Module tnh ton cc biu thc phng trnh - V thut ton + Chn v x l cch m ha bi ton + Php ton chn lc sinh tn trong qun th ti mi th h + Lai to + t bin - Hin th kt qu + Hin th kt qu v hnh v minh ha tin trnh tm kim li gii ca thut ton

Phn III Gii bi ton


3.1 Cu trc ca mt h phng trnh nhp vo Phng trnh nhp vo gm c ba phn - Phn khai bo tn bin v cc khong gi tr: tn bin c khai bo trc sau ngn cch vi khong gi tr bng du cch V d: x 1 100 l khai bo mt bin tn l x c khong gi tr l 1 n 100 Y -1.5 178 l khai bo mt bin c tn l y c khong gi tr t -1.5 n 178 - Phn ngn cch gia cc bin v cc phng trnh: khai bo phng trnh v bin ngn cch nhau bi ch equation ri xung dng khai bo cc phng trnh - Phn khai bo cc phng trnh: mi phng trnh l mt biu thc ton hc gm c cc bin, cc ton t , cc hm , v cc hng s. Lu , mi phng trnh ch nm trn mt dng, khng c hai phng trnh no cng nm trn cng mt dng V d: x+y*z y^z-10( tng ng vi phng trnh x + y*z- y^z -10 = 0 ) Mt s v d v nhp cc h phng trnh H phng trnh :

C th nhp vo nh sau : x -100 100 y -100 100 equation x+y-2 2*x+3*y-5 H phng trnh ( ) ( )

Khi nhp vo c th nhp nh sau

equation ( ) ( ) x/y + y/x -3

( )

3.2 cc php tnh, hng s v cc hm chng trnh h tr a) cc php tnh chng trnh h tr: +,-,*,/,^,(,) b) Cc hm chng trnh h tr: asin hm arcsin acos hm arcos atan hm arctan sinh hm sinh (hypebol cua sin) cosh hm cosh (hypebol cua cos) tanh hm tanh (hypebol cua tan) sin hm sin cos hm cos tan hm tan cot hm cot ln hm loga c s e lg hm loga c s 10 log hm loga c s tng qut sqrt hm cn bc hai abs hm tr tuyt i Lu , tnh ton c chnh xc v cc php ton l d dng khi nhp vo phng trnh chng ta nn vit biu thc trong hm trong cp ngoc (), v d sin(x) thay v sinx c) chng trnh h tr hng s pi = 3.1459 v E = 2.7183

chng trnh tnh ton chun xc, ngi dng nn nhp vo ng tn hng s nh quy nh. 3.3 Tnh ton gi tr biu thc a) X l hon chnh xu biu thc Sau khi c mt xu hp l ch cha cc thnh phn sau: + Ton hng l mt s thp phn +Ton t hai ngi: + ; - ; * ; / ; ^ +Ton t mt ngi: +Tn cc hm theo ng mu cho trc +Cc du ngoc hp l : ( ) Ta phi m bo tnh logic ca biu thc bng cch thm cc du ngoc ( v ) phn nh r ton t mt ngi v 2 ngi V d: 5+-6 5+(-(6)) -3*12(-(3))*12 iu ny c th thc hin ng thut vic duyt xu v kim tra xem nhng k t no l ton t m ng cnh nhau, tc l c s xut hin ton t mt ngi . Sau khi pht hin v tr ton t mt ngi, ta ch vic chn thm du ( v ). n lc ny xu sn sng tnh ton. b) Thut ton tnh gi tr mt xu biu thc Khc vi cch lm thng thng l dng k php Ba Lan i t biu thc trung t sang hu t ri dng 1 stack thc hin tnh ton biu thc hu t, ta dng 2 stack thc hin tnh ton trc tip trn biu thc trung t. Lm nh vy ta s tit kim c ng k thi gian v iu ny l cn thit cho gii thut di truyn vn thc hin rt nhiu vng lp tnh ton Cch thc hin nh sau: Ta dng 2 stack goi l stack ton hng (STH) v stack ton t (STT) u tin, ta duyt xu kim tra xem k t (nhm k t ) th k l g: +Nu l mt s thp phn, ta nht lun vo STH +Nu l k t (, ta nht lun vo STT +Nu l ton t hai ngi +.-,*,/,^ ta c cc kh nng:

(1) Nu kim tra u stack STT thy c ton t c u tin cao hn ta ly ton t ny ra khi stack ng thi ly 2 ton hng u stack STH cho tnh vi ton t ny, c bao nhiu li nht vo STH (2) Nu kim tra u stack STT tht c ton t c u tin thp hn ta n gin nht ton t ang xt vo STT (3) Nu kim tra u stack STT tht c ton t c u tin bng th ty vo tnh u tin tri hay phi m ta quyt nh thc hin tnh nh (1) hay thc hin nht nh (2). C th nu u tin tri (nh +,-..) ta thc hin tnh nh (1) nu u tin phi (nh ^) ta thc hin nht nh (2). (4) Nu kim tra u stack STT thy c k t ( , ta ly 2 ton hng u stack STH cho tnh vi ton t ang xt, c bao nhiu li nht vo STH v ly ( ra khi STT + Nu l ton t 1 ngi hay l tn hm th v c hai loi ny u i format theo dang sau: X(Y) trong X l ton t mt ngi hoc tn hm, Y l biu thc bn trong. Ta nht X vo STT ri thc hin thut ton nh bnh thng vi cc k t tip theo + Nu l k t ) ta s ly cc ton t u stack STT cho tnh nh (2) cho n khi gp ( th x l nh sau: (1) Nu k t sau k t u stack (lc ny l () l ton t mt ngi hay tn hm ta b ( ra khi STT, ly ton t v hm ra cho tnh vi 2 ton hng u Stack STH nh (2) (2) Nu khng phi (1) ta tnh nh (3) C duyt xu nh vy cho n khi ht xu th kim tra stack STT xem c cn phn t no khng, cn th thc hin nh cc trng hp trn. Kt qu cui cng chnh l gi tr cui cng cn li trong STH. 3.4 Cch m ha li gii bi ton ny ta dng m ha nh phn p dng gii thut di truyn. Gi s phng trnh c cc n cn tnh l x1,x2,xn . Ta biu din li gii cn tnh di dng mt chui bit, mi bin ng vi mt on bit trong chui, v d 3 bin x,y,z c li gii m ha l 1001110101011000(gm 16 bit) vi phn b cho li gii l x ng vi 6 bit u (100111), y ng vi 5 bit tip theo (01010) v cui cng z ng vi 5 bit cui (11000). a) Cng thc chuyn i gia li gii m ha v gi tr thc Trong bi ton ny ta quy nh l mi li gii s tm chnh xc n 6 ch s thp phn sau du phy, t y vi mi khong gi tr gii hn bin ta c th tnh c s bit cn thit biu din gi tr ca bin. Gi s bin x trong khong [a,b] ta mun chnh xc l 6 ch s thp phn sau du phy. Ta

tnh x theo cng thc vi t l gi tr thp phn ca dy bit ng vi bin x, tm N sao cho nghim chnh xc n 6 ch s, ta cn ( ) chn N sao cho t cng thc ny ta tnh ra c N = nh vy ta tnh c s bit cn thit biu din m ha cho mi bin, di ca dy bit li gii l tng di ca cc bit cc bin. V d h phng trnh c hai n x v y vi khong nghim l -100, 100 th mi bin cn 28 bit m ha. Nh vy li gii c m ha bi mt 56 bit, bt k mt xu 56 bit u c th l mt li gii va bi ton. b) Hm fitness Vi cc bi ton ti u ha s dng gii thut di truyn, hm fitness i khi li ng vai tr quan trng trong vic tm li gii tt, li gii ca bi ton i khi li ph thuc rt nhiu vo hm fitness. Thng trong cc bi ton ti u, ngi ta thng xy dng hm fitness theo chiu hng cng ln cng tt, nhng trong bi ton ny, hm fitness ta xy dng s ngc li mt cht, hm fitness cng nh cng tt. C th hn, trong bi ton ny hm fitness ca chng ta l gi tr ln nht ca tr tuyt i cc hm thnh phn. H phng trnh vi cc phng trnh thnh phn fi(x1,x2xn) vi I t 1 n m (c m phng trnh) th Fitness = max(|fi(x1,x2,x3,xn)|) y fitness cng gn 0 ta cng tnh c gn nghim, ln ca fitness cng l tiu chun ta nh gi nghim v d h phng trnh
( )

H ny c hai biu thc phng trnh l x+y 2 v 2x+3y-5 , v d ng vi gi tr x = 2, y= 3 th gi tr hai biu thc ny l f1 = 2+3-2 = 3; f2 = 2*2+3*3-5 = 8 th fitness ng vi n l 8. 3.5 Lai ghp Trong qu trnh ci t thut ton, do cch m ha l nh phn v do bi ton c th l gii h phng trnh ta c th dng 2 cch lai ghp sau:

a) Lai ghp chia on cho c li gii ca h Ta ch n gin chn mt im ct ngu nhin ca c th b v m ri ghp on ny ca b vo on kia ca m. Ta tr v 1 con vi xc sut 50% trong 2 con c sinh ra. dy, do li gii l xu nh phn bao gm cc xu con l cc m ha cho tng nghim thnh phn ca h phng trnh, ct c li gii s khng thc s hiu qu, hi t lu. V l do ta thc hin cch th hai:

V d: 0000011101110111 0111011011110001

0000011011110001 0111011101110111 b) Lai ghp chia on cho tng on ca li gii Mi on l mt m ha cho 1 nghim thnh phn ta cng chn mt im ct ngu nhin v thc hin tng t nh A ch c iu n v lai ghp y l mt nghim thnh phn vi mt nghim thnh phn tng ng V d: 00000111 01110111 01110110 11110001

00110110 01000111 00110110 01000111 ...

01110111 01110111 01110101 01110101

Lm nh cch ny gip hi t d dng hn v chnh xc hn. 3.6 t bin t bin trong phn ny ch yu da trn o bit v t bin y thc hin trn n v li gii thnh phn l ch yu. Ni chung t hiu qu cao ta cn phi kt hp nhiu php t bin mong sinh ra mt li gii mi khc bit v tt thot khi tnh trng b tc ca cc b a phng. Tuy nhin nu ch trng ch vo s ngu nhin ca cc t bin tm thng th rt kh c c kt qu tt trong thi gian ngn. V th ta s dng ba k thut c bit tng hiu qu ca t bin

a) t bin theo mc tng ca k thut ny l da vo gi tr fitness tt nht hin ti la chn phng php t bin ph hp. Thng th nu fitness cn ln th t do ca t bin l ln v nh th s d sinh ra cc kt qu mi khc nhiu so vi li gii c-v kh nng c kt qu tt l cao v lc ny fitness cn ln t do ca t bin c th kim sot v tr t bin trn xu gi tr. t do ln nu ta tp trung t bin vo u xu bit nh phn (lm thay i nhiu) , t do nh nu ta tp trung t bin vo cui xu bit nh phn (lm thay i t). C th trong code, ta chia thnh cc mc >100, 20-100,10-20,<10 b) Tng cng t bin khi b tc Ta c th nhn ra b tc nu sau nhiu th h fitness tt nht khng thay i nhiu hoc gi nguyn gi tr. Lc ny ta tng t l t bin ln 10 ln vi hi vng s tng kh nng sinh ra li gii mi tt hn. iu ny tr gi bng tc tnh ton gim i c) t bin theo xu hng K thut ny c bit hiu qu khi b tc hoc khi fitness ra nh hn 5. Lc ny ta thc hin thay i 1 lng nh gi tr vo tng nghim. Ta thc hin bng cch duyt t bn phi ca xu bit v thay i cc gi tr bit t phi qua tri. Xc sut c thay i s gim dn theo chiu di bit t phi sang tri cho nn mi ln thay i ta chi thay mt lng epsilon kh nh (thc nghim cho thy nu 1<fitness <5) epsilon thng c 1-2 n v)

Ta to ra xu hng thay i bng cch a vo 1 mng c s phn t bng s lng bin ca h phng trnh. Gi tr ca 1 phn t ca mng c th l 1,0,1 tng trng cho xu hng gim, gi nguyn, tng. Mi li gii c mt mng nh vy v khi mi khi to, mng to vi gi tr ngu nhin. Sau mi ln t bin, nu fitness xu i, ta li to mi xu hng 3.7 Cc phng php u tranh sinh tn trong qun th a) Roulete y l phng php loi b cc qun th trong mi th h sau php ton lai to v t bin, vi mc ch gi li cc c th khe mnh, phng php bnh xe Roulete s khin cho cc c th tt s c c hi sng st trong cc th h sau cao hn cc c th thng thng, iu ny lm cho bi ton nhanh chng hi t n kt qu, tuy nhin v tnh hi t nhanh ca thut ton khi p dng bnh xe Roulete nn i khi kt qu ta tm c l mt im gii hn a phng, v do c nhiu qun th yu nhng nh cc php lai to v t bin c th em li cc kt qu cao hn, nh vy y, vai tr ca t bin i khi li ng vai tr rt ln. Cch xy dng php chn theo bnh xe Roulete Input : mt tp cc qun th c M li gii ca bi ton Output: mt qun th li gii N qun th ( M > N ) c chn t cc phn t u vo Gi s cc li gii l S1,S2,SM vi cc fitness tng ng l F1,F2, FM Ta tm gi tr ln nht ca dy F: Max = max(F1,F2, FM) Vi mc ch Fi cng nh th kh nng chn Si cng thp. Ta xy dng cc gi tr xc sut cho cc li gii nh sau ( t ) Pi = ((MAX +1) Fi )/Sum ( Pi l xc sut chn li gii Si ) T cch xy dng xc sut trn ta thy nhng li gii c fitness cng ln th kh nng tn ti cng t, cng tun theo quy lut ca t nhin. Sau khi c xc sut la chn ca cc li gii ta i n thc hin thut ton chn t Q0 = 0; Q1=P0; Qi = Q(i-1) + P(i-1) QM = 1; Ta sinh ngu nhin mt s trong khong (0,1) gi s l r, ta tm ch s j sao cho Q(j+1) > r >= Qj li gii Si s c chn vo qun th mi, thut ton c thc hin cho n khi s phn t trong li gii l bng N. Nhn xt: cch chn ny l theo quy lut ca t nhin, nhng phn t no tt s c kh nng c chn cao, Nhng i khi trong nhiu tinhd hung php la chn ny nh mt i s a dng phong ph ca cc phn t.

b) Linear ranking Php chn Linear ranking cng da trn tng ging nh bnh xe Roulete, ta cng xy dng xc sut cho cc li gii ri chn la li gii theo xc sut ca chng. Nhng y, xc sut ca cc li gii th da trn hng ca cc li gii. Xy dng xc sut cho cc li gii nh sau: Vi cc li gii S0,S1,SM ta xp hng ca chng theo gi tr fitness ca chng, fitness cng nh th hng cng cao, c th hng ca Si l s cc li gii m ln hn n + 1 V d nh sau Solution fitness Rank 0 3 6 1 5 3 2 4 4 3 3 6 4 4 4 5 6 2 6 9 1 Rank y fitness cng nh th rank cng ln Xc sut chn li gii l : Sum = () Pi = rank(i)/Sum Sau vic la chn li gii tng t nh la chn trong bnh xe roulete nh trn. c) Tournament Php la chn ny ni chung l hng ti nghing v nhng phn t c fitness ln. Php chn nh sau, ta chn ngu nhin hai phn t trong qun th v qun th tt hn s c chn vi mt xc sut no trong khong (0,5 ti 1) ( y ta chn l 0.75). s la chn ny c lp li cho n khi t c s qun th cn chn

Phn IV Cc class chnh ca chng trnh


1) Class Variable Class ny l mt class ca i tng bin, mi bin l mt th hin ca class ny
public class Variable { /** khi nguoi choi khong nhap khoang cho bien thi chon the nay */ final double BOTTOM = -1000; final double TOP = 1000; /** ten cua bien */ private String name; /** chan duoi cua bien */ private double bottom; /**chan tren cua bien */ private double top; /** gia tri cua bien */ private double value ; /** gia tri ma hoa cua value*/ private String bitString; private int bitLength; public int mutpoint=0; public MutatorOperator muOp; public Variable(String name) { this.name = name; this.bottom = BOTTOM; this.top = TOP; muOp=new MutatorOperator(); } /** * tinh gia tri do dai cho bit khi ma coi la tinh dung den 6 chu so sau day phay */ public void setLength() { Double length; length = (Math.log(top - bottom) + 6*Math.log(10)) / (Math.log(2)); bitLength = length.intValue() + 1; } public void setInterval(double bottom, double top) { this.bottom = bottom; this.top = top; setLength(); }

public String getBitString(){ return this.bitString; } public void setBitString(String binaryString) { this.bitString = String.valueOf(binaryString); /* tinh luon gia tri cua bien theo bitstring chuyen vao */ calculateValue(); } /** * method de tinh gia tri cua bien dua vao bitstring da cho */ private void calculateValue() { // tinh gia tri cua value theo bitString value = (bottom + (topbottom)*realValueOfBinaryString(bitString)/Math.pow(2, bitLength)); } public int getbitLength() { return bitLength; } public String getName() { return name; } public double getValue() { return value; } /** * tinh gia tri nhi phan cua bitstring * @param binaryString * @return */ private double realValueOfBinaryString(String binaryString) { double result = 0; char[] temp = binaryString.toCharArray(); for (int i = 0; i< temp.length; i++){ if (temp[i] == '1') result += Math.pow(2, bitLength-i -1); } return result; } public double return } public double return } } getBottom(){ this.bottom; getTop(){ this.top;

2) Class Solution

Class ny l class ca mt li gii, ni cch khc, mi mt li gii l mt th hin ca class ny


public class Solution { /** chuoi ma hoa mot loi giai*/ private String bitString; public int age=0; int tendency[]; /** gia tri thich nghi ung voi cach ma hoa nay*/ private double fitness; /** cac bien trong mot solution*/ private ArrayList <Variable > variableList; /** cac dau cho phep nhap vao*/ private ArrayList<Sign> signList; /** cac ham cho phep nguoi dung nhap vao*/ private ArrayList<BasicFunction> functionList; /** cac hang so cho phep nhap vao */ private ArrayList<Constant> constantList; /** gia tri cua cac ham phuong trinh thanh phan */ public ArrayList <Double> f; /** cac bieu thuc phuong trinh */ ArrayList <String> functionString; /** tinh hop le cua du lieu*/ public boolean isSatisfied = true; private boolean allSatisfied=false; public Solution(String bitString, String type){ this.setBitString(bitString); variableList = new ArrayList<Variable> (); f = new ArrayList <Double> (); /*add cac bien vao list bien cua function*/ loadVariable(MainPanel.varName); this.functionString = MainPanel.equationList; /* chia cac bit cho cac bien */ separateBitString(); /* load cac gia tri cua ham */ loadElement(); /* tinh fitness cua solution */ calculateFitness(); tendency=new int[MainPanel.varName.size()]; for(int j=0;j<tendency.length;j++){ if(type.charAt(j)=='0'){

tendency[j]=-1; } else tendency[j]=type.charAt(j);

} } public Solution(String bitString ) throws IOException{ this.setBitString(bitString); variableList = new ArrayList<Variable> (); f = new ArrayList <Double> (); /*add cac bien vao list bien cua function*/ loadVariable(MainPanel.varName); this.functionString = MainPanel.equationList; /* chia cac bit cho cac bien */ separateBitString(); /* load cac gia tri cua ham */ loadElement(); /* tinh fitness cua solution */ calculateFitness(); tendency=new int[MainPanel.varName.size()]; for(int j=0;j<tendency.length;j++){ int tr=0; double rand=Math.random(); if(rand<0.5)tr=-1; else if(rand>=0.5) tr=1; tendency[j]=tr;

} } /** * lay cac ham, dau, hang * @param signList la cac * @param functionList la * @param constantList la */ public void loadElement()

so de tinh toan cac ham sign cho phep cac ham cho phep cac hang so cho phep {

this.signList = Main.signList; this.functionList = Main.functionList; this.constantList = Main.constantList; } /** * copy cac bien vao solution * @param variable */ private void loadVariable(ArrayList<Variable> variable) { for (Variable i : variable){ Variable j=new Variable(i.getName());

j.setInterval(i.getBottom(), i.getTop()); this.variableList.add(j); } } /** * fitness la gia tri lon nhat cua cac ham f */ public void calculateFitness() { /* tinh gia tri cua cac ham */ calculateAllFunction(); /* kiem tra xem co ham nao khong xac dinh khong if (isSatisfied){

*/

double max = f.get(0); for (double i : f){ if (max < i) max = i; fitness = max; } } } /** * tinh gia tri cac bieu thuc phuong trinh * */ public void calculateAllFunction(){ /*tinh cac gia tri cac ham tu cac gia tri cua bien da tinh */ while(!allSatisfied){ f.clear(); for (int i=0;i< functionString.size();i++){ /*tinh gia tri va cho vao arrayList function de tim gia tri lon nhat cho fitness*/ f.add(calculate(functionString.get(i))); if(!isSatisfied){ i = functionString.size(); this.setBitString(genRandomBinaryString(bitString.length(),this.getBitString() )); separateBitString(); } } /* khi tinh duoc het tuc la khong co bieu thuc nao ko tinh dc( vi du nhu can (-1) ) */ if(isSatisfied){ allSatisfied=true; } } allSatisfied=false;

} public boolean calculateAllFunction2(){ /*tinh cac gia tri cac ham tu cac gia tri cua bien da tinh */ for (String i: functionString){ /*tinh gia tri va cho vao arrayList function de tim gia tri lon nhat cho fitness*/ calculate(i); if(!isSatisfied) return false; } /* khi tinh duoc het tuc la khong co bieu thuc nao ko tinh dc( vi du nhu can (-1) ) */ return true; }

/** * ting gia tri cac ham * @param str bieu thuc chua duoc thay the bien * @return gia tri cua bieu thuc */ public double calculate(String str) { String s = substitute(str); /* thay the gia tri cua bien, hang so va */ double tg=Double.NaN;

//System.out.println("phuong trinh : "+str); // cau viet ham tinh vao trong nay ExpressionCalculator eCal=new ExpressionCalculator(s); tg = eCal.calculate(); if(Double.isInfinite(tg)||Double.isNaN(tg)){ isSatisfied=false;

} else{ isSatisfied=true; return Math.abs(tg); } return Math.abs(1000); } /** * thay gia tri cac bien va gia tri cac ham vao str * @param str bieu thuc chua bien, hang so * @return bieu thuc da duoc thay bien va hang */ public String substitute(String str) { /*loai bo dau cach*/ str = str.replaceAll(" ", "");

/* thay gia tri cac bien thanh cac so tuong ung (ten bien da duoc sap xep)*/ for (Variable i: variableList) str = str.replaceAll(i.getName(),"(" + i.getValue()+")"); /* thay gia tri cua hang so vao bieu thuc*/ for (Constant i : constantList) str = str.replaceAll(i.getName(),""+i.getValue()); /*thay ten cac ham thanh cac alias co do dai 3 ki tu*/ for (BasicFunction i : functionList) str = str.replaceAll(i.getName(),""+i.getAlias()); return str; } public double getFitness(){ return fitness; } public String getBitString() { return bitString; } public void setBitString(String bitString) { this.bitString = bitString; } /** * khi ma muon thay gia * @param variable */ public void setVariable(ArrayList <Variable> variable) { loadVariable(variable); } /** * phan bo cac bit cho cac bien */ public void separateBitString() { int l = 0; Variable var; for (int i =0; i< variableList.size(); i++){ var = variableList.get(i); String s = bitString.substring(l, l+var.getbitLength()); var.setBitString(s); var.muOp.inputString=s; l = l+var.getbitLength(); } } public ArrayList <Variable> getVariableList() { return variableList; }

public void displayVariable() { for (Variable i : variableList) System.out.println(" "+ i.getName()+"= "+i.getValue()); } public boolean isSastisfied() { return isSatisfied; } public static String genRandomBinaryString(int length,String s) { String result = ""; Random ran = new Random(); for (int i = 0; i < length; i++){ int x = ran.nextInt(2); result +=""+x; } return result; } public String display() { String str = ""; for (Variable i : variableList) str+=""+i.getName()+" = "+i.getValue()+"\n"; str+=""+fitness+"\n"; str+="cac phuong trinh thanh phan la : \n "; for (double i : f) str+=""+i+"\n"; return str; } }

3) Class CrossMutationManager y l class dng thc hin vic lai to v t bin


public class CrossMutationManager { static static static static static static static int count=0; boolean free=false; double threse2=20; double threse3=5; double threse4=10000; double threse5=4; int count2=1;;

static double trendency[]=new double[(int)Math.pow(2,MainPanel.bestResult.getVariableList().size())]; private MainPanel mainPanel; boolean specialmode=false; private static double remember; public CrossMutationManager(MainPanel mainPanel){ this.mainPanel = mainPanel; int numvar=mainPanel.varName.size(); }

//CAC HAM LAI GHEP private static Solution crossingTwo(Solution p1,Solution p2) throws IOException{ String s="";

ArrayList<Variable> var1=p1.getVariableList();

ArrayList<Variable> var2=p2.getVariableList(); for(int j=0;j<var1.size();j++){ s+=crossingVariable(var1.get(j),var2.get(j)); } Solution child=new Solution(s); return child; }

private static String crossingVariable(Variable v1,Variable v2){ String str=""; int varL=v1.getbitLength(); int randCut=(int)(Math.random()*(varL)); if(randCut==0||randCut==varL){ randCut=varL/2; } if(Math.random()>=0.5){ str = v1.getBitString().substring(0,randCut) +v2.getBitString().substring(randCut,varL); } else{ str = v2.getBitString().substring(0,randCut) +v1.getBitString().substring(randCut,varL); } return str; }

//Ham nay la ham se duoc goi public static ArrayList<Solution> crossingSet(ArrayList<Solution> pop, double crossRate) throws IOException{ ArrayList<Solution> children=new ArrayList(); ArrayList<Solution> chosen=new ArrayList(); int numEntity=pop.size(); int numChosen=(int)(numEntity*crossRate); if(numChosen>numEntity||numChosen<=1){

numChosen=2; } //lay ngau nhien numChosen bo me for(int i=0;i<numChosen;i++){ double rawIndex=numEntity*Math.random(); if(rawIndex==numEntity)rawIndex--; int ranIndex=(int)rawIndex; chosen.add(pop.get(ranIndex)); } //bo me doi mot de con for(int i=0;i<numChosen;i++){ for(int j=i+1;j<numChosen;j++){ children.add(crossingTwo(chosen.get(i),chosen.get(j))); } } return children; } // HAM DOT BIEN public static ArrayList<Solution> mutating(ArrayList<Solution> pop,double mutRate,double min,double max) throws IOException{ ArrayList<Solution> result=new ArrayList<Solution>(); //lay trung binh fitness double ave=(min+max)/2; //lay so ca the int numEntity=pop.size(); //lay do dai 1 ca the int solutionLength=pop.get(0).getBitString().length(); //lay so luong dot bien int numMut=(int)(numEntity*solutionLength*mutRate); //vong lap dot bien for(int i=1;i<=numMut;i++){ count=0; String s=""; int randrow=(int)(Math.random()*(numEntity)); if(randrow==numEntity) randrow--; String chosen=pop.get(randrow).getBitString(); //chon phai ca the tot nhat thi tha, chon cai khac if(MainPanel.bestResult==pop.get(randrow)){ numMut++; continue; }

//xu ly binh thuong khi khong co deadlock if(!MainPanel.deadlock){ //kiem tra da den nguong 10 chua de dung phuong phap sao cho phu hop if(pop.get(randrow).getFitness()<10){ s= mutatingVariableGood(pop.get(randrow)); pop.get(randrow).setBitString(s); }

else //kiem tra da den nguong 20 chua de dung phuong phap sao cho phu hop if(pop.get(randrow).getFitness()<20){ s= mutatingVariableGood(pop.get(randrow)); pop.get(randrow).setBitString(s); } //kiem tra da den nguong 100 chua de dung phuong phap sao cho phu hop else if(pop.get(randrow).getFitness()>100){ s= mutatingVariableSuperBad(pop.get(randrow)); pop.get(randrow).setBitString(s); } //tu 20 den 100 dung phuong phap khac else{ s=mutatingVariableBad(pop.get(randrow)); pop.get(randrow).setBitString(s); } } //xu ly khi co deadlock else{ //ket hop cac phuong phap lai voi xac suat khac nhau if(Math.random()>=0.6){ if(Math.random()>0.1){ if(pop.get(randrow).getFitness()>min+3){ numMut++; ;continue; } if(Math.random()>=0.1){ s=bestTendency((pop.get(randrow))); pop.get(randrow).setBitString(s); } else{ String s1=""; for(Variable j:pop.get(randrow).getVariableList()){ s1+=j.muOp.invertSegment(j.getbitLength()/2); } s=s1; } } else{ String s1=""; for(Variable j:pop.get(randrow).getVariableList()){ if(Math.random()>=0.5) s1+=j.muOp.replacing(j.getbitLength()/2); } s=s1;

} } else{ s= mutatingVariableSuperGood(pop.get(randrow)); pop.get(randrow).setBitString(s); } } //ca the duoc dot bien xong thi dem di tinh lai fitness double old=pop.get(randrow).getFitness(); Solution sol=new Solution(pop.get(randrow).getBitString()); //neu tinh ra to hon ban dau, thay doi tendency sol.tendency=pop.get(randrow).tendency; result.add(sol); //for(int h=0;h<sol.getVariableList().size();h++){ // System.out.println(sol.getVariableList().get(h).getValue()); // } //System.out.println("Before------------");

//neu ca the tinh lai fitness ma ko tm dieu kien xac dinh, bo di, bat dau chon lai if(!pop.get(randrow).calculateAllFunction2()){ pop.get(randrow).setBitString(chosen); i--; continue; } } return result; } /*CAC PHUONG PHAP DOT BIEN*/ //dao ca xau dau vao public static String invertAll(String s){ String result = ""; Random ran = new Random(); for (int i = 0; i < s.length(); i++){ int x =Character.digit(s.charAt(i),10);

x=

ran.nextInt(2);

result +=""+x; } return result; } //dao 1 bit cua xau dau vao private static String invertBit(int index, String s){ if(index<0)index=0; if(index>s.length()) index=s.length()/2; if(s.charAt(index)=='0'){ s=s.substring(0,index) +"1"+ s.substring(index+1,s.length()); } else if(s.charAt(index)=='1'){ s=s.substring(0,index) +"0"+ s.substring(index+1,s.length()); } return s; } //dot bien dac biet, dua vao tendency cua tung bien trong loi giai //chi dung khi deadlock

private static String specialMuting(String s, int varindex,Solution sol, int coeff){ int i=s.length()-1;

if(sol.tendency[varindex]==0){ return s; } else if(sol.tendency[varindex]==1){ int l=s.length(); //System.out.println(s+":"+realValueOfBinaryString(s)); for(int k=coeff-1;k>=0;k--){ if(s.charAt(k)=='0') { s=s.substring(0,k) +"1"+ s.substring(k+1,s.length()); for(int j=coeff;j>k;j--){

double rate=j*1.0/(coeff-k); s=s.substring(0,j) +"0"+ s.substring(j+1,s.length()); } for(int j=s.length()-1;j>coeff;j--){ double rate=j*1.0/(s.length()-coeff);

if(Math.random()>1-rate){ s=s.substring(0,j) +((Math.random()>0.5)?"1":"0")+ s.substring(j+1,s.length()); } } break; } } //System.out.println(s+":"+realValueOfBinaryString(s)); }else if(sol.tendency[varindex]==-1){ int l=s.length(); //System.out.println(s+":"+realValueOfBinaryString(s)); for(int k=coeff-1;k>=0;k--){ if(s.charAt(k)=='1') { s=s.substring(0,k) +"0"+ s.substring(k+1,s.length()); for(int j=coeff;j>k;j--){ double rate=j*1.0/(coeffk); s=s.substring(0,j) +"1"+ s.substring(j+1,s.length()); } for(int j=s.length()1;j>coeff;j--){

double rate=j*1.0/(s.length()-coeff); if(Math.random()>1-rate){ s=s.substring(0,j) +((Math.random()>0.5)?"1":"0")+ s.substring(j+1,s.length()); } } break; }

} //System.out.println(s+":"+realValueOfBinaryString(s)); } return s; } //phuong thuc dieu chinh bit theo tendency dc goi khi be tac private static String adjust(Solution sol){ for(int h=0;h<sol.getVariableList().size();h++){ //System.out.println(sol.getVariableList().get(h).getValue()); } //System.out.println("After------------"); ArrayList<Variable> vars=sol.getVariableList(); String s=""; for(Variable j:vars){ String s1=j.getBitString(); s1=specialMuting(j.getBitString(),vars.indexOf(j),sol,getPosition(j, MainPanel.bestResult.getFitness()/8)); s+=s1; } return s; } //phuong thuc thay doi tendency 1 cach ngau nhien private static void changeTendency(Solution sol){ for(int j=0;j<sol.tendency.length;j++){ int tr=1; double rand=Math.random(); if(rand<0.5)tr=-1; else if(rand>=0.5) tr=1; sol.tendency[j]=tr; } }

//thay 1 bit bang 1 gia tri ngau nhien private String ranBit(int index, String s){ if(index<0)index=0; if(index>s.length()) index=s.length()/2; Random ran = new Random();

s=s.substring(0,index) +ran.nextInt(2)+ s.substring(index+1,s.length());

return s; }

//dao 1 doan public String invertSegment(int sizerange,String inputString){ int index=(int)(Math.random()*inputString.length()); if(index<0||index>inputString.length()) index=inputString.length()/2-1; int size=(int)(Math.random()*sizerange); while(index+size>inputString.length()){ size--; } String s=invertAll(inputString.substring(index,index+size)); inputString=inputString.substring(0,index)+s+inputString.substring(index+size, inputString.length()); return inputString; } //phuong thuc dot bien cho cac ca the rat tot //dot bien theo xac suat tang dan theo chieu dai bit private static String mutatingVariableSuperGood(Solution sol){ ArrayList<Variable> vars=sol.getVariableList(); String s=""; for(Variable j:vars){ String s1=j.getBitString(); double t=1; if(Math.random()>0.9) t=MainPanel.bestResult.getFitness(); int l=getPosition(j, t); for(int i=0;i<l;i++){ if(Math.random()>(((l-1-i))*1.0/(l))){ s1=invertBit(i,j.getBitString()); } } s+=s1; }

return s; } //phuong thuc dot bien cho cac ca the ko tot private static String mutatingVariableBad(Solution sol){ ArrayList<Variable> vars=sol.getVariableList(); String s=""; for(Variable i:vars){ int randcol=(int)(Math.random()*i.getbitLength()/2); String s1=invertBit(randcol,i.getBitString()); s+=s1; } return s; } //dot bien cho ca the tot private static String mutatingVariableGood(Solution sol){ ArrayList<Variable> vars=sol.getVariableList(); String s=""; for(Variable i:vars){ int randcol=i.getbitLength()/2+(int)(Math.random()*i.getbitLength()/2); String s1=invertBit(randcol,i.getBitString()); s+=s1; } return s; } //dot bien cho cac ca the rat ko tot private static String mutatingVariableSuperBad(Solution sol){ ArrayList<Variable> vars=sol.getVariableList(); String s=""; for(Variable i:vars){ int randcol=(int)(Math.random()*i.getBitString().length()); String s1=invertAll(i.getBitString()); s+=s1; } return s; } public static int getPosition2(Variable variable, double e) { Double l; double temp = e*(Math.pow(2, variable.getbitLength())1)/(variable.getTop()-variable.getBottom()); l = Math.log(temp)/Math.log(2); return l.intValue(); } public static int getPosition(Variable variable, double e) { Double l; double temp = (variable.getTop()-variable.getBottom())/(Math.pow(2, variable.getbitLength())); l = variable.getbitLength()-Math.log(e/temp)/Math.log(2); return l.intValue(); }

private static double realValueOfBinaryString(String binaryString) { double result = 0; char[] temp = binaryString.toCharArray(); for (int i = 0; i< temp.length; i++){ if (temp[i] == '1') result += Math.pow(2, binaryString.length()-i -1); } double value = (-100 + (200)*result/Math.pow(2, binaryString.length())); return value; } public static String bestTendency(Solution sol){

String s=""; String result=sol.getBitString(); double bestFit=sol.getFitness(); for(int i=0;i<(int)Math.pow(2,sol.getVariableList().size());i++ ){ assignTendency(sol, Integer.toBinaryString(i)); s=adjust(sol); Solution sol2; //System.out.println("Best: "+bestFit); try { sol2 = new Solution(s); if(bestFit> sol2.getFitness()){ bestFit=sol2.getFitness(); result=sol2.getBitString(); if(bestFit<MainPanel.bestResult.getFitness()) return result; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }

} return result; } public static void assignTendency(Solution sol,String type){ char[] normtype= new char[sol.tendency.length]; int count=type.length(); int count2=0; for(int i=0;i<sol.tendency.length;i++){ if(count+i==sol.tendency.length){ normtype[i]=type.charAt(count2); count--; count2++;

} else{ normtype[i]='0'; } } for(int j=0;j<sol.tendency.length;j++){ if(normtype[j]=='0'){ sol.tendency[j]=-1; } else sol.tendency[j]=1; } } }

Phn V hng dn s dng giao din


- Giao din lc mi bt u

- Khi n nt start chy chng trnh, mn hnh s nh th ny :

- Mn hnh v th ca qu trnh tnh, trc tung biu din fitness, trc honh biu din th h ca qun th

Phn V Mt s kt qu Test
Lu : nhng tnh ton di y u l tnh ton vi cc tham s mc nh -Pop Size = 80 -Generation No: 2000 -Mutation Probability: 0.1 -reproduction Probability: 0.25 -Uncertainty: 0.0001 -Selection method: Roullete

1) phng trnh mt bin cha hm ln x -100 100 equation x^2- 2* ln (E^x)+ 1 khi chy ch 0.2s tnh c nghim
thoi gian thuc hien : 0.193028682giay the he ket thuc : 2 x = 0.9915349185466766 5.840095271913981E-5 cac phuong trinh thanh phan la : 5.840095271913981E-5

2) phng trnh mt bin bc cao x -1000 1000 equation x^10 1024 kt qu chy th nghim
thoi gian thuc hien : 81.050685303giay the he ket thuc : 2000 x = 2.0000003278255463 0.0016784680349246628 cac phuong trinh thanh phan la : 0.0016784680349246628

y l hm m v khong tm nghim ln, kt qu nh trn l c th chp nhn. 3) H phng trnh tuyn tnh 3 n x -1000 1000 y -1000 1000 z -1000 1000 equation x + y+z -10 z-x-y 2*x+y-2-z

Khi chy c kt qu
thoi gian thuc hien : 384.816139934giay the he ket thuc : 1374 x = 1.9999983474612235 y = 2.999987408518791 z = 4.99993595033884 7.82936811454249E-5 cac phuong trinh thanh phan la : 7.82936811454249E-5 4.9805641174405224E-5 4.81531023979187E-5

Kt qu trn l kh tt v khong nghim rt rng v ta mi ch chy ht 1374/2000 th h 4)Hm m cho phng trnh 3 bin x -100 100 y -100 100 z -100 100 equation x+y+z-10 2^x + x^10 -3^y-4-1024+27 z^x-25+y^x-9 Kt qu
x = -1.9958533346652985 y = 0.17070099711418152 z = 12.286082655191422 1.0105148211480355 cac phuong trinh thanh phan la : 0.46093031764030457 1.0105148211480355 0.07450466166696046

Sau 500 th h chy 5) Phng trnh hn hp x -100 100 y -100 100 z -100 100 equation x+y+z-10 x*y*z-5*x*y x*y-6 Kt qu

thoi gian thuc hien : 401.989187419giay the he ket thuc : 1093 x = 1.9997936487197876 y = 3.0002647936344147 z = 4.999989879131317 8.952121231331489E-5 cac phuong trinh thanh phan la : 4.832148551869864E-5 6.072430606351986E-5 8.952121231331489E-5

You might also like