Differential Evolution on Ubuntu

Differential Evolution という手法があって、GAより少ない計算量で良い結果が出るかもしれないという話を聞いたので、試してみることにした。 とりあえずhttp://www.icsi.berkeley.edu/~storn/code.htmlでC++(けっこう種類があるのにPerlはなかった)のソース(devcpp.zip)を落としてきて、コンパイルしてみる。C++をまともに自分でコンパイルしたことがほとんど無かったので困った。Makefileくらいつけといてくれたらいいのに。仕方ないのでMakefileの書き方を勉強して書いた。 CXXFLAGS = -Wall testobjs = DETest.o DESolver.o bin = test all: $(testobjs) $(CXX) $(CXXFLAGS) -o $(bin) $^ DESolver.o: DESolver.h DESolver.cpp $(CXX) $(CXXFLAGS) -c $^ DETest.o: DETest.cpp $(CXX) $(CXXFLAGS) -c $^ clean: rm $(testobjs) $(bin) で、これでmake叩くがコンパイルは通らない。このページを良く読むと、MS Visual C++ 5.0とか書いてある。えー。g++じゃないんですか。僕の環境は、Ubuntu 10.04 + gcc 4.4.3です。VC++なんてもちろんないです。 $ make g++ -Wall -c DETest.cpp DETest.cpp:71: error: ‘::main’ must return ‘int’ DETest.cpp: In function ‘int main()’: DETest.cpp:96: error: return-statement with no value, in function returning ‘int’ make: *** [DETest.o] エラー 1 これはまあいい。main()がvoidじゃ嫌だというので、int型に直して、return 0;してあげればおk。 int main(void) {   (中略) return 0; } で、またmake叩くが通らない。 $ make g++ -Wall -c DETest.cpp g++ -Wall -c DESolver.h DESolver.cpp DESolver.cpp: In member function ‘void DESolver::Setup(double*, double*, int, double, double)’: DESolver.cpp:57:

Read more