#include <kv/optimize.hpp>

namespace ub = boost::numeric::ublas;

struct Func {
	template <class T> T operator() (const ub::vector<T>& x){
		return 1/(pow(x(0)-2,2) + pow(x(1)-3,2)+1) - 1/(pow(x(0)-5,2)+pow(x(1)-6,2)+1);
	}
};

typedef kv::interval<double> itv;

int main()
{
	int i;
	ub::vector<itv> I;
	std::list< ub::vector<itv> > result;
	std::list< ub::vector<itv> >::iterator p;

	std::cout.precision(17);

	I.resize(2);
	for (i=0; i<I.size(); i++) I(i) = itv(0., 10.);

	result = minimize(I, Func(), 1e-5);

	p = result.begin();
	while (p != result.end()) {
		std::cout << *(p++) << "\n";
	}
}
