三分感觉没什么暖用啊,单峰函数完全可以模拟退火= =可能只是因为代码比较短吧。
#include<bits/stdc++.h>
using namespace std;
#define Inc(i,L,r) for(register int i=(L);i<=(r);++i)
const double eps = 1e-10;
double calc(double x){
……
}
int main(){
……
double L,r;
while(r-L>eps){//三分最小值
double Mid=(L+r)/2;
double MidMid=(Mid+r)/2;
if(calc(Mid)<calc(MidMid))r=MidMid;
else L=Mid;
}
while(r-L>eps){//三分最大值
double Mid=(L+r)/2;
double MidMid=(Mid+r)/2;
if(calc(Mid)<calc(MidMid))L=Mid;
else r=MidMid;
}
return 0;
}