static int vBushuMode(uiContext d, int major_mode) { forichiranContext fc; ichiranContext ic; unsigned inhibit = 0; int retval = 0; d->status = 0; if((retval = getForIchiranContext(d)) == NG) { killmenu(d); return(GLineNGReturn(d)); } fc = (forichiranContext)d->modec; /* selectOne ¤ò¸Æ¤Ö¤¿¤á¤Î½àÈ÷ */ fc->allkouho = bushu_char; fc->curIkouho = 0; if (!cannaconf.HexkeySelect) inhibit |= ((unsigned char)NUMBERING | (unsigned char)CHARINSERT); else inhibit |= (unsigned char)CHARINSERT; if((retval = selectOne(d, fc->allkouho, &fc->curIkouho, BUSHU_SZ, BANGOMAX, inhibit, 0, WITH_LIST_CALLBACK, NO_CALLBACK, vBushuExitCatch, bushuQuitCatch, uiUtilIchiranTooSmall)) == NG) { killmenu(d); return(GLineNGReturnFI(d)); } ic = (ichiranContext)d->modec; ic->majorMode = major_mode; ic->minorMode = CANNA_MODE_BushuMode; currentModeInfo(d); *(ic->curIkouho) = d->curbushu; /* ¸õÊä°ìÍ÷¹Ô¤¬¶¹¤¯¤Æ¸õÊä°ìÍ÷¤¬½Ð¤»¤Ê¤¤ */ if(ic->tooSmall) { d->status = AUX_CALLBACK; killmenu(d); return(retval); } if ( !(ic->flags & ICHIRAN_ALLOW_CALLBACK) ) { makeGlineStatus(d); } /* d->status = ICHIRAN_EVERYTIME; */ return(retval); }
static int bushuHenkan(uiContext d, int flag, int ext, int cur, int (*quitfunc )(uiContext, int, mode_context )) { forichiranContext fc; ichiranContext ic; unsigned inhibit = 0; WCHAR_T *yomi, **allBushuCands; RkStat st; int nelem, currentkouho, nbunsetsu, length, retval = 0; extern int defaultBushuContext; if(flag) { yomi = (WCHAR_T *)bushu_key[cur]; length = WStrlen(yomi); d->curbushu = (short)cur; } else { d->nbytes = RomajiFlushYomi(d, d->buffer_return, d->n_buffer); yomi = d->buffer_return; length = d->nbytes; } if((nbunsetsu = bushuBgnBun(&st, yomi, length)) == NG) { killmenu(d); (void)GLineNGReturn(d); return -1; } if((nbunsetsu != 1) || (st.klen > 1) || (st.maxcand == 0)) { /* Éô¼ó¤È¤·¤Æ¤Î¸õÊ䤬¤Ê¤¤ */ d->kanji_status_return->length = -1; makeBushuIchiranQuit(d, flag); currentModeInfo(d); killmenu(d); if(flag) { makeGLineMessageFromString(d, "\244\263\244\316\311\364\274\363\244\316\270\365\312\344\244\317\244\242\244\352\244\336\244\273\244\363"); /* ¤³¤ÎÉô¼ó¤Î¸õÊä¤Ï¤¢¤ê¤Þ¤»¤ó */ } else { return(NothingChangedWithBeep(d)); } return(0); } /* ¸õÊä°ìÍ÷¹Ô¤òɽ¼¨¤¹¤ë */ /* 0 ¤Ï¡¢¥«¥ì¥ó¥È¸õÊä + 0 ¤ò¥«¥ì¥ó¥È¸õÊä¤Ë¤¹¤ë¤³¤È¤ò¼¨¤¹ */ if((allBushuCands = getIchiranList(defaultBushuContext, &nelem, ¤tkouho)) == 0) { killmenu(d); (void)GLineNGReturn(d); return -1; } /* Éô¼óÊÑ´¹¤Ï³Ø½¬¤·¤Ê¤¤¡£ */ if(RkwEndBun(defaultBushuContext, 0) == -1) { /* 0:³Ø½¬¤·¤Ê¤¤ */ if(errno == EPIPE) jrKanjiPipeError(); jrKanjiError = "\244\253\244\312\264\301\273\372\312\321\264\271\244\316\275\252\316\273\244\313\274\272\307\324\244\267\244\336\244\267\244\277"; /* ¤«¤Ê´Á»úÊÑ´¹¤Î½ªÎ»¤Ë¼ºÇÔ¤·¤Þ¤·¤¿ */ freeGetIchiranList(allBushuCands); killmenu(d); (void)GLineNGReturn(d); return -1; } if(getForIchiranContext(d) == NG) { freeGetIchiranList(allBushuCands); killmenu(d); (void)GLineNGReturn(d); return -1; } fc = (forichiranContext)d->modec; fc->allkouho = allBushuCands; if (!cannaconf.HexkeySelect) inhibit |= (unsigned char)NUMBERING; fc->curIkouho = currentkouho; /* ¸½ºß¤Î¥«¥ì¥ó¥È¸õÊäÈÖ¹æ¤òÊݸ¤¹¤ë */ currentkouho = 0; /* ¥«¥ì¥ó¥È¸õÊ䤫¤é²¿ÈÖÌܤò¥«¥ì¥ó¥È¸õÊä¤È¤¹¤ë¤« */ if((retval = selectOne(d, fc->allkouho, &fc->curIkouho, nelem, BANGOMAX, inhibit, currentkouho, WITH_LIST_CALLBACK, bushuEveryTimeCatch, bushuExitCatch, quitfunc, uiUtilIchiranTooSmall)) == NG) { freeGetIchiranList(allBushuCands); killmenu(d); (void)GLineNGReturnFI(d); return -1; } ic = (ichiranContext)d->modec; if(!flag) { /* convertAsBushu */ ic->majorMode = ic->minorMode = CANNA_MODE_BushuMode; } else { if(ext) { ic->majorMode = ic->minorMode = CANNA_MODE_BushuMode; } else { ic->majorMode = CANNA_MODE_ExtendMode; ic->minorMode = CANNA_MODE_BushuMode; } } currentModeInfo(d); /* ¸õÊä°ìÍ÷¹Ô¤¬¶¹¤¯¤Æ¸õÊä°ìÍ÷¤¬½Ð¤»¤Ê¤¤ */ if(ic->tooSmall) { d->status = AUX_CALLBACK; killmenu(d); return(retval); } if ( !(ic->flags & ICHIRAN_ALLOW_CALLBACK) ) { makeGlineStatus(d); } /* d->status = EVERYTIME_CALLBACK; */ return(retval); }
int main(int argc, char** argv) { const unsigned int T_SIZE = 3; // size for tournament selection const unsigned int VEC_SIZE = 3; // Number of object variables in genotypes const unsigned int POP_SIZE = 10; // Size of population const unsigned int MAX_GEN = 1000; // Maximum number of generation before STOP const unsigned int MIN_GEN = 10; // Minimum number of generation before ... const unsigned int STEADY_GEN = 10; // stop after STEADY_GEN gen. without improvement const float P_CROSS = 0.8; // Crossover probability const float P_MUT = 0.5; // mutation probability const double EPSILON = 0.01; // range for real uniform mutation double SIGMA = 0.3; // std dev. for normal mutation // some parameters for chosing among different operators const double hypercubeRate = 0.5; // relative weight for hypercube Xover const double segmentRate = 0.5; // relative weight for segment Xover const double uniformMutRate = 0.5; // relative weight for uniform mutation const double detMutRate = 0.5; // relative weight for det-uniform mutation const double normalMutRate = 0.5; // relative weight for normal mutation const unsigned int SEED = 42; // seed for random number generator po::options_description desc; std::string matrixdir, model, nullmodel, trainingset, testingset, lastrun; desc.add_options() ("matrixdir", po::value<std::string>(&matrixdir), "The directory set up by SOFT2Matrix") ("model", po::value<std::string>(&model), "The gene regulatory network model") ("nullmodel", po::value<std::string>(&nullmodel), "The gene regulatory network null (scrambled) model") ("trainingset", po::value<std::string>(&trainingset), "The list of arrays which have been selected for inclusion in the training set") ("testingset", po::value<std::string>(&testingset), "The list of arrays which have been selected for inclusion in the testing set") ("lastrun", po::value<std::string>(&lastrun), "The output file from the last run, to re-use scores from (optional)") ; po::variables_map vm; po::store(po::parse_command_line(argc, argv, desc), vm); po::notify(vm); std::string wrong; if (!vm.count("help")) { if (!vm.count("matrixdir")) wrong = "matrixdir"; else if (!vm.count("model")) wrong = "model"; else if (!vm.count("trainingset")) wrong = "trainingset"; else if (!vm.count("testingset")) wrong = "testingset"; else if (!vm.count("nullmodel")) wrong = "nullmodel"; } if (wrong != "") std::cerr << "Missing option: " << wrong << std::endl; if (vm.count("help") || wrong != "") { std::cout << desc << std::endl; return 1; } if (!fs::is_directory(matrixdir)) { std::cout << "Matrix directory doesn't exist." << std::endl; return 1; } if (!fs::is_regular(model)) { std::cout << "Model file doesn't exist or not regular file." << std::endl; return 1; } if (!fs::is_regular(nullmodel)) { std::cout << "Null model file doesn't exist or not regular file." << std::endl; return 1; } if (!fs::is_regular(trainingset)) { std::cout << "Training set file doesn't exist or not regular file." << std::endl; return 1; } if (!fs::is_regular(testingset)) { std::cout << "Testing set file doesn't exist or not regular file." << std::endl; return 1; } std::list<double> lastRun; if (fs::is_regular(lastrun)) { std::ifstream flastrun(lastrun.c_str()); static const boost::regex prev(".*SVM Result: .* Result \\(([^\\)]+)\\).*"); while (flastrun.good()) { std::string l; std::getline(flastrun, l); boost::smatch m; if (!boost::regex_match(l, m, prev)) { continue; } lastRun.push_back(strtod(m[1].str().c_str(), NULL)); } } ExpressionMatrixProcessor emp(matrixdir); GRNModel m(model, emp, 30); GRNModel m2(nullmodel, emp, 30); std::list<std::string> trainingArrays, testingArrays; m.loadArraySet(trainingset, trainingArrays); m.loadArraySet(testingset, testingArrays); m.loadSVMTrainingData(trainingArrays); m2.loadArraySet(trainingset, trainingArrays); m2.loadArraySet(testingset, testingArrays); m2.loadSVMTrainingData(trainingArrays); // We seed it just so we can restart if need be. rng.reseed(SEED); EvaluateSVMFit eval(m, m2, trainingArrays, lastRun, 30, testingArrays.size()); std::vector<double> minVals, maxVals; // log(gamma) minVals.push_back(-15); maxVals.push_back(15); // log(C) minVals.push_back(-15); maxVals.push_back(2); // nu minVals.push_back(0); maxVals.push_back(1); eoRealVectorBounds rvb(minVals, maxVals); eoRealInitBounded<Indi> random(rvb); eoPop<Indi> pop(POP_SIZE, random); apply<Indi>(eval, pop); pop.sort(); std::cout << "Initial Population" << std::endl; std::cout << pop; eoDetTournamentSelect<Indi> selectOne(T_SIZE); eoSelectPerc<Indi> select(selectOne);// by default rate==1 eoGenerationalReplacement<Indi> replace; eoSegmentCrossover<Indi> xoverS; eoHypercubeCrossover<Indi> xoverA; eoPropCombinedQuadOp<Indi> xover(xoverS, segmentRate); xover.add(xoverA, hypercubeRate, true); eoUniformMutation<Indi> mutationU(EPSILON); eoDetUniformMutation<Indi> mutationD(EPSILON); eoNormalMutation<Indi> mutationN(SIGMA); eoPropCombinedMonOp<Indi> mutation(mutationU, uniformMutRate); mutation.add(mutationD, detMutRate); mutation.add(mutationN, normalMutRate, true); eoGenContinue<Indi> genCont(MAX_GEN); eoSteadyFitContinue<Indi> steadyCont(MIN_GEN, STEADY_GEN); eoCombinedContinue<Indi> continuator(genCont); continuator.add(steadyCont); eoSGATransform<Indi> transform(xover, P_CROSS, mutation, P_MUT); eoEasyEA<Indi> gga(continuator, eval, select, transform, replace); gga(pop); pop.sort(); std::cout << "Final Population:" << std::endl << pop << std::endl; return 0; }
int dicTourokuHinshi(uiContext d) { tourokuContext tc = (tourokuContext)d->modec; forichiranContext fc; ichiranContext ic; unsigned inhibit = 0; int currentkouho, retval = 0, numkouho; d->status = 0; if(tc->yomi_len < 1) { return canna_alert(d, "\306\311\244\337\244\362\306\376\316\317\244\267" "\244\306\244\257\244\300\244\265\244\244", acDicTourokuYomi); /* ÆɤߤòÆþÎϤ·¤Æ¤¯¤À¤µ¤¤ */ } if((retval = getForIchiranContext(d)) < 0) { freeDic(tc); defineEnd(d); return(GLineNGReturnTK(d)); } fc = (forichiranContext)d->modec; /* selectOne ¤ò¸Æ¤Ö¤¿¤á¤Î½àÈ÷ */ if (tblflag == TABLE2) { fc->allkouho = hinshitbl2; numkouho = HINSHI2_SZ; } else { fc->allkouho = hinshitbl1; numkouho = HINSHI1_SZ; } fc->curIkouho = 0; currentkouho = 0; if (!cannaconf.HexkeySelect) inhibit |= ((unsigned char)NUMBERING | (unsigned char)CHARINSERT); else inhibit |= (unsigned char)CHARINSERT; if((retval = selectOne(d, fc->allkouho, &fc->curIkouho, numkouho, BANGOMAX, inhibit, currentkouho, WITH_LIST_CALLBACK, NO_CALLBACK, uuTHinshiExitCatch, uuTHinshiQuitCatch, uiUtilIchiranTooSmall)) < 0) { popForIchiranMode(d); popCallback(d); freeDic(tc); defineEnd(d); return(GLineNGReturnTK(d)); } ic = (ichiranContext)d->modec; ic->majorMode = CANNA_MODE_ExtendMode; ic->minorMode = CANNA_MODE_TourokuHinshiMode; currentModeInfo(d); /* ¸õÊä°ìÍ÷¹Ô¤¬¶¹¤¯¤Æ¸õÊä°ìÍ÷¤¬½Ð¤»¤Ê¤¤ */ if(ic->tooSmall) { d->status = AUX_CALLBACK; return(retval); } if ( !(ic->flags & ICHIRAN_ALLOW_CALLBACK) ) { makeGlineStatus(d); } /* d->status = ICHIRAN_EVERYTIME; */ return(retval); }