This is Drill.m in view mode; [Download] [Up]
#import "Drill.h" @implementation Drill - init { [super init]; L = 11300; dh = 8.5; Yp = 12; visc0600 = 60; visc0300 = 36; n = 3.32*log(visc0600/visc0300); K = visc0300/pow(511,n); return self; } - setGenes { double myPi; numOfGenes = 5; popUpList = [[PopUpList alloc] init]; [[popUpList addItem:"Dirll Pipe ID"] setTag:0]; [[popUpList addItem:"Drill Pipe OD"] setTag:1]; [[popUpList addItem:"Mud Weight"] setTag:2]; [[popUpList addItem:"Circulating Rate"] setTag:3]; [[popUpList addItem:"Plastic Viscosity"] setTag:4]; geneMap[0] = 16; geneMap[1] = 16; geneMap[2] = 16; geneMap[3] = 16; geneMap[4] = 16; myPi = 3.141592653589793; scaleFactor[0] = (double)8.0/pow((double)2.0,(double)geneMap[0]); scaleFactor[1] = (double)10.0/pow((double)2.0,(double)geneMap[1]); scaleFactor[2] = (double)5.0/pow((double)2.0,(double)geneMap[2]); scaleFactor[3] = (double)1000.0/pow((double)2.0,(double)geneMap[3]); scaleFactor[4] = (double)40.0/pow((double)2.0,(double)geneMap[4]); xOffset[0] = 1.0; xOffset[1] = 2.0; xOffset[2] = 10.0; xOffset[3] = 50.0; xOffset[4] = 10.0; return self; } - (double)getFitnessOfMember:(int)genomeNum { double revenue; [super getFitnessOfMember:genomeNum]; d = xVal[genomeNum][0]+xOffset[0]; dp = xVal[genomeNum][1]+xOffset[1]; Mw = xVal[genomeNum][2]+xOffset[2]; Q = xVal[genomeNum][3]+xOffset[3]; Pv = xVal[genomeNum][4]+xOffset[4]; V = Q/(2.448*d*d); Vfm = V*60; Vc = pow(5.82e4*K/Mw,1/(2*n))*pow((1.6/d)*((3*n+1)/(4*n)),n/(2*n)); if(V < Vc*.85){ PdsL = pow((1.6*Vfm/d)*(3*n+1)/(4*n),n)*K*L/(300*d); Pds = PdsL; } else if(V > Vc*1.15){ PdsT = 2.27e7*pow(Mw,0.8)*pow(Vfm,1.8)*pow(Pv,0.2)*L/pow(d,1.2); Pds = PdsT; } else{ PdsL = pow((1.6*Vfm/d)*(3*n+1)/(4*n),n)*K*L/(300*d); PdsT = 2.27e7*pow(Mw,0.8)*pow(Vfm,1.8)*pow(Pv,0.2)*L/pow(d,1.2); if(PdsL > PdsT){ Pds = PdsL; } else{ Pds = PdsT; } } revenue = pow(Q,2.5)/10 - pow(Pds,1.5)/pow(500,1.5); if(d > dp){ revenue = revenue/3; } genePool[genomeNum].fitness = revenue; return genePool[genomeNum].fitness; } - dumpSolution:console forGenome:(int)genomeNum { int i; id popUpListMatrix; char buffer[MAXPATHLEN+1]; [console replaceSel:"\n>>> Best Drill Solution Achieved: \n"]; popUpListMatrix = [popUpList itemList]; for(i=0;i<numOfGenes;i++){ sprintf(buffer,"\n%d. %s = %f ", i+1, [[popUpListMatrix cellAt:i :0] title], xVal[genomeNum][i]+xOffset[i]); [console replaceSel:buffer]; } return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.