Hello everyone!
I’m trying to use Simulated Annealing algorithm on Ubuntu, ROOT 6.12/06, and I have a few questions about it.
Algorithm works and gives good result, but ROOT crashes without any error after finish, and I can’t understand why. What can cause this kind of a problem?
It seems that SetMaxFunctionCalls and SetMaxIterations doesn’t affect anything. Algorithm always works slow and does a lot of iterations. What am I doing wrong?
I don’t really understand how magnitude of Tolerance affects minimization. Where I can read about it?
I don’t need precise result of minimization, my function should be below some known value. Can I set some kind of threshold for minimization?
I set integer steps for some of my variables, but it still uses some strange double type steps. Where I can read about how it works?
This how I set parameters of minimizer and function, full code is pretty big and confusing.
Thank you in advance.
NumMin.C (2.2 KB)
couet
October 26, 2018, 6:44am
3
When I run your macro I get some C++ errors.
Do you see the same ?
root [0]
Processing NumMin.C...
In file included from input_line_11:1:
/Users/couet/Downloads/NumMin.C:6:9: error: use of undeclared identifier 'peak'
vector <peak> f_peaks;
^
/Users/couet/Downloads/NumMin.C:12:10: error: use of undeclared identifier 'peak'
vector <peak> f_peaks;
^
/Users/couet/Downloads/NumMin.C:14:18: error: use of undeclared identifier 'Smoothing'
*hist_smooth = Smoothing(hist, par[0], xmin, xmax);
^
/Users/couet/Downloads/NumMin.C:15:2: error: use of undeclared identifier 'Background'
Background(hist_smooth, par[1], par[2], xmin, xmax);
^
/Users/couet/Downloads/NumMin.C:16:2: error: use of undeclared identifier 'Deconvolution'
Deconvolution(hist_smooth, par[3], par[4]*100, xmin, xmax);
^
/Users/couet/Downloads/NumMin.C:17:13: error: use of undeclared identifier 'find_peaks'
f_peaks = find_peaks (hist_smooth, diff.size() + 1,par[5], par[6]/100, xmin, xmax);
^
/Users/couet/Downloads/NumMin.C:44:28: error: use of undeclared identifier 'peak'
ROOT::Math::Functor funct(peak,7);
^
/Users/couet/Downloads/NumMin.C:82:6: error: variable has incomplete type 'void'
void all {
^
/Users/couet/Downloads/NumMin.C:84:11: error: unexpected ';' before '}'
NumMin (); //this function works, results are printed, then ROOT crashes
^
/Users/couet/Downloads/NumMin.C:86:2: error: expected ';' after top level declarator
}
^
;
This is full version of my script. File output.root is about 1Gb and I cant upload it here.
indent2.C (29.6 KB)
couet
October 26, 2018, 7:02am
5
What i mean is that in the first example you posted there is some C++ mistakes. Do you also get these errors when you run it ?
Yes, I get them. I wanted to show part with minimization algorithm, without redundant details.
couet
October 26, 2018, 7:14am
7
How are we supposed to run the indent2.C script ?
If a data set is needed may be you can give access to it from a Download place ?
Is Google Drive okay?
https://drive.google.com/open?id=15SXCW0_9TEi3tdGctvKDoB3857TcWLPB
In indent2.C call function find_peak(), it should recreate the problem.
couet
October 26, 2018, 11:00am
10
running your code in debug mode I get:
root [0] .L indent2.C
root [1] find_peak()
Warning in <TFile::Init>: file smooth.root probably not closed, cannot read free segments
Warning in <TFile::Init>: file smooth.root probably not closed, trying to recover
Info in <TFile::Recover>: smooth.root, recovered key TH1F:front_no_MWPC_0 at address 218
Info in <TFile::Recover>: smooth.root, recovered key TH1F:front_0_sm_3_b_12_9_dec_2_10_pf_11_0.001_1 at address 2898
Warning in <TFile::Init>: successfully recovered 2 keys
Info in <TCanvas::MakeDefCanvas>: created default TCanvas with name c1
test00
test01
test02
test03
0.414183
test03
15.9431
test03
2.3405
test03
2.90783
test03
1.35005
test03
1.35549
test03
0.0926126
test04
test1
test2
[/Users/couet/git/roottrunk-bin/lib/libCling.so] TCling__PrintStackTrace /Users/couet/git/roottrunk/core/metacling/src/TCling.cxx:359
[/Users/couet/git/roottrunk-bin/lib/libCling.so] TClingCallbacks::PrintStackTrace() /Users/couet/git/roottrunk/core/metacling/src/TClingCallbacks.cxx:808
[/Users/couet/git/roottrunk-bin/lib/libCling.so] cling::MultiplexInterpreterCallbacks::PrintStackTrace() (no debug info)
[/Users/couet/git/roottrunk-bin/lib/libCling.so] cling_runtime_internal_throwIfInvalidPointer (no debug info)
[<unknown binary>] (no debug info)
[<unknown binary>] (no debug info)
[/Users/couet/git/roottrunk-bin/lib/libCling.so] cling::Interpreter::RunFunction(clang::FunctionDecl const*, cling::Value*) (no debug info)
[/Users/couet/git/roottrunk-bin/lib/libCling.so] cling::Interpreter::EvaluateInternal(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, cling::CompilationOptions, cling::Value*, cling::Transaction**, unsigned long) (no debug info)
[/Users/couet/git/roottrunk-bin/lib/libCling.so] cling::Interpreter::process(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, cling::Value*, cling::Transaction**, bool) (no debug info)
[/Users/couet/git/roottrunk-bin/lib/libCling.so] cling::MetaProcessor::process(llvm::StringRef, cling::Interpreter::CompilationResult&, cling::Value*, bool) (no debug info)
[/Users/couet/git/roottrunk-bin/lib/libCling.so] HandleInterpreterException(cling::MetaProcessor*, char const*, cling::Interpreter::CompilationResult&, cling::Value*) /Users/couet/git/roottrunk/core/metacling/src/TCling.cxx:2145
[/Users/couet/git/roottrunk-bin/lib/libCling.so] TCling::ProcessLine(char const*, TInterpreter::EErrorCode*) /Users/couet/git/roottrunk/core/metacling/src/TCling.cxx:2303
[/Users/couet/git/roottrunk-bin/lib/libCore.so] TApplication::ProcessLine(char const*, bool, int*) /Users/couet/git/roottrunk/core/base/src/TApplication.cxx:1031
[/Users/couet/git/roottrunk-bin/lib/libRint.so] TRint::ProcessLineNr(char const*, char const*, int*) /Users/couet/git/roottrunk/core/rint/src/TRint.cxx:746
[/Users/couet/git/roottrunk-bin/lib/libRint.so] TRint::HandleTermInput() /Users/couet/git/roottrunk/core/rint/src/TRint.cxx:607
[/Users/couet/git/roottrunk-bin/lib/libRint.so] TTermInputHandler::Notify() /Users/couet/git/roottrunk/core/rint/src/TRint.cxx:131
[/Users/couet/git/roottrunk-bin/lib/libRint.so] TTermInputHandler::ReadNotify() /Users/couet/git/roottrunk/core/rint/src/TRint.cxx:123
[/Users/couet/git/roottrunk-bin/lib/libCore.so] TUnixSystem::CheckDescriptors() /Users/couet/git/roottrunk/core/unix/src/TUnixSystem.cxx:1322
[/Users/couet/git/roottrunk-bin/lib/libCore.so] TMacOSXSystem::DispatchOneEvent(bool) /Users/couet/git/roottrunk/core/macosx/src/TMacOSXSystem.mm:378
[/Users/couet/git/roottrunk-bin/lib/libCore.so] TSystem::InnerLoop() /Users/couet/git/roottrunk/core/base/src/TSystem.cxx:413
[/Users/couet/git/roottrunk-bin/lib/libCore.so] TSystem::Run() /Users/couet/git/roottrunk/core/base/src/TSystem.cxx:362
[/Users/couet/git/roottrunk-bin/lib/libCore.so] TApplication::Run(bool) /Users/couet/git/roottrunk/core/base/src/TApplication.cxx:1184
[/Users/couet/git/roottrunk-bin/lib/libRint.so] TRint::Run(bool) /Users/couet/git/roottrunk/core/rint/src/TRint.cxx:460
[/Users/couet/git/roottrunk-bin/bin/root.exe] main /Users/couet/git/roottrunk/main/src/rmain.cxx:32
[/usr/lib/system/libdyld.dylib] start (no debug info)
[<unknown binary>] (no debug info)
Error in <HandleInterpreterException>: Trying to access a pointer that points to an invalid memory address..
Execution of your code was aborted.
In file included from input_line_11:1:
/Users/couet/Downloads/indent2.C:922:4: warning: invalid memory pointer passed to a callee:
*front_smooth[1] = peak.smooth;
^~~~~~~~~~~~~~~
root [2]
1 Like
Hmmm, I get something like this:
root [0] .L indent2.C
root [1] find_peak();
Info in <TCanvas::MakeDefCanvas>: created default TCanvas with name c1
test00
test01
test02
test03
0.414183
test03
15.9431
test03
2.3405
test03
2.90783
test03
1.35005
test03
1.35549
test03
0.0926126
test04
dmitriy@dmitriy-ASUS:~/Progs0106/analysis p2$
What can cause such behavior?
Okay, reinstallation solved my problem with crash, but I still don’t understand how to control this algorithm. It looks like setting MaxFunctionCalls, MaxIteration or Tolerance doesn’t affect process of minimization.
1 Like
Axel
November 1, 2018, 11:04am
13
Well, ROOT told you that you had a problem in your code:
Users/couet/Downloads/indent2.C:922:4: warning: invalid memory pointer passed to a callee:
*front_smooth[1] = peak.smooth;
^~~~~~~~~~~~~~~
Not sure how reinstalling ROOT would fix that?
Regarding the minimization: which problem are you trying to solve here?
Were you able to learn more about this algorithm? I’m having similar issues. I can not control the algorithm, or change step size to an integer level.
Nope, I had to write my own version of Simulated Annealing.