Mercurial > hg > absrec
comparison test_approx.py @ 21:d395461b92ae tip
Lots and lots of modifications. Approximate recovery script working.
author | Nic Cleju <nikcleju@gmail.com> |
---|---|
date | Mon, 23 Apr 2012 10:54:57 +0300 |
parents | 2837cfeaf353 |
children |
comparison
equal
deleted
inserted
replaced
20:eccc7a5b9ee3 | 21:d395461b92ae |
---|---|
46 | 46 |
47 # For exceptions | 47 # For exceptions |
48 import pyCSalgos.BP.l1qec | 48 import pyCSalgos.BP.l1qec |
49 import pyCSalgos.BP.l1qc | 49 import pyCSalgos.BP.l1qc |
50 import pyCSalgos.NESTA.NESTA | 50 import pyCSalgos.NESTA.NESTA |
51 import pyCSalgos.SL0.EllipseProj | |
51 | 52 |
52 # For plotting with right axes | 53 # For plotting with right axes |
53 import utils | 54 import utils |
54 | 55 |
55 | 56 |
62 see http://stackoverflow.com/questions/1675766/how-to-combine-pool-map-with-array-shared-memory-in-python-multiprocessing | 63 see http://stackoverflow.com/questions/1675766/how-to-combine-pool-map-with-array-shared-memory-in-python-multiprocessing |
63 """ | 64 """ |
64 currmodule = sys.modules[__name__] | 65 currmodule = sys.modules[__name__] |
65 currmodule.proccount = share | 66 currmodule.proccount = share |
66 currmodule.ntasks = ntasks | 67 currmodule.ntasks = ntasks |
67 currmodule._printLock = printLock | 68 currmodule.printLock = printLock |
68 | 69 |
69 def generateTaskParams(globalparams): | 70 def generateTaskParams(globalparams): |
70 """ | 71 """ |
71 Generate a list of task parameters (for parallel running) | 72 Generate a list of task parameters (for parallel running) |
72 """ | 73 """ |
80 algosN = globalparams['algosN'] | 81 algosN = globalparams['algosN'] |
81 algosL = globalparams['algosL'] | 82 algosL = globalparams['algosL'] |
82 lambdas = globalparams['lambdas'] | 83 lambdas = globalparams['lambdas'] |
83 | 84 |
84 # Process parameters | 85 # Process parameters |
85 noiselevel = 1.0 / (10.0**(SNRdb/10.0)); | 86 # noiselevel = norm(noise)/norm(signal) = SNR**(-1/2) = 10**-(SNRdb/20) |
87 noiselevel = 1.0 / (10.0**(SNRdb/20.0)); | |
86 | 88 |
87 for delta in deltas: | 89 for delta in deltas: |
88 for rho in rhos: | 90 for rho in rhos: |
89 p = round(sigma*d); | 91 p = round(sigma*d); |
90 m = round(delta*d); | 92 m = round(delta*d); |
366 taskresults = [] | 368 taskresults = [] |
367 if doparallel: | 369 if doparallel: |
368 currmodule.printLock = multiprocessing.Lock() | 370 currmodule.printLock = multiprocessing.Lock() |
369 pool = multiprocessing.Pool(ncpus,initializer=initProcess,initargs=(currmodule.proccount,currmodule.ntasks,currmodule.printLock)) | 371 pool = multiprocessing.Pool(ncpus,initializer=initProcess,initargs=(currmodule.proccount,currmodule.ntasks,currmodule.printLock)) |
370 taskresults = pool.map(run_once_tuple, taskparams) | 372 taskresults = pool.map(run_once_tuple, taskparams) |
373 pool.close() | |
374 pool.join() | |
371 else: | 375 else: |
372 for taskparam in taskparams: | 376 for taskparam in taskparams: |
373 taskresults.append(run_once_tuple(taskparam)) | 377 taskresults.append(run_once_tuple(taskparam)) |
374 | 378 |
375 # Process results | 379 # Process results |
431 xrec[strname][:,iy] = algofunc(y[:,iy],M,Omega,epsilon) | 435 xrec[strname][:,iy] = algofunc(y[:,iy],M,Omega,epsilon) |
432 elapsed[strname] = elapsed[strname] + (time.time() - timestart) | 436 elapsed[strname] = elapsed[strname] + (time.time() - timestart) |
433 except pyCSalgos.BP.l1qec.l1qecInputValueError as e: | 437 except pyCSalgos.BP.l1qec.l1qecInputValueError as e: |
434 print "Caught exception when running algorithm",strname," :",e.message | 438 print "Caught exception when running algorithm",strname," :",e.message |
435 except pyCSalgos.NESTA.NESTA.NestaError as e: | 439 except pyCSalgos.NESTA.NESTA.NestaError as e: |
440 print "Caught exception when running algorithm",strname," :",e.message | |
441 except pyCSalgos.SL0.EllipseProj.EllipseProjDaiError as e: | |
436 print "Caught exception when running algorithm",strname," :",e.message | 442 print "Caught exception when running algorithm",strname," :",e.message |
437 | 443 |
438 # Run algorithms with Lambda | 444 # Run algorithms with Lambda |
439 for ilbd,lbd in zip(numpy.arange(lambdas.size),lambdas): | 445 for ilbd,lbd in zip(numpy.arange(lambdas.size),lambdas): |
440 for iy in numpy.arange(y.shape[1]): | 446 for iy in numpy.arange(y.shape[1]): |
447 #gamma = algofunc(y[:,iy],M,Omega,D,U,S,Vt,epsilon,lbd) | 453 #gamma = algofunc(y[:,iy],M,Omega,D,U,S,Vt,epsilon,lbd) |
448 xrec[strname][ilbd][:,iy] = algofunc(y[:,iy],M,Omega,epsilon,lbd) | 454 xrec[strname][ilbd][:,iy] = algofunc(y[:,iy],M,Omega,epsilon,lbd) |
449 elapsed[strname][ilbd] = elapsed[strname][ilbd] + (time.time() - timestart) | 455 elapsed[strname][ilbd] = elapsed[strname][ilbd] + (time.time() - timestart) |
450 except pyCSalgos.BP.l1qc.l1qcInputValueError as e: | 456 except pyCSalgos.BP.l1qc.l1qcInputValueError as e: |
451 print "Caught exception when running algorithm",strname," :",e.message | 457 print "Caught exception when running algorithm",strname," :",e.message |
458 except pyCSalgos.SL0.EllipseProj.EllipseProjDaiError as e: | |
459 print "Caught exception when running algorithm",strname," :",e.message | |
460 | |
452 | 461 |
453 return xrec, elapsed | 462 return xrec, elapsed |
454 | 463 |
455 def generateFigProveEll1(): | 464 def generateFigProveEll1(): |
456 """ | 465 """ |
457 Generates figure xxx (prove theorem IV.2 in the ell_1 case). | 466 Generates figure xxx (prove theorem IV.2 in the ell_1 case). |
458 Figures are saved in the current folder. | 467 Figures are saved in the current folder. |
459 """ | 468 """ |
460 #paramsl1prove['reference_signal'] = nesta[1] # 'NESTA' | 469 #paramsl1prove['reference_signal'] = nesta[1] # 'NESTA' |
461 run(stdparams_approx.paramsl1prove) | 470 run(stdparams_approx.paramsl1prove) |
462 plotProveEll1(stdparams_approx.paramsl1prove['savedataname']) | 471 #plotProveEll1(stdparams_approx.paramsl1prove['savedataname']) |
463 | 472 utils.replot_ProveEll1(stdparams_approx.paramsl1prove['savedataname'], |
473 algonames = None, # will read them from mat file | |
474 doshow=False, | |
475 dosave=True, | |
476 saveplotbase=stdparams_approx.paramsl1prove['saveplotbase'], | |
477 saveplotexts=stdparams_approx.paramsl1prove['saveplotexts']) | |
464 | 478 |
465 def generateFig(): | 479 def generateFig(): |
466 """ | 480 """ |
467 Generates figures. | 481 Generates figures. |
468 Figures are saved in the current folder. | 482 Figures are saved in the current folder. |
469 """ | 483 """ |
470 run(stdparams_exact.std1) | 484 #stdparams_approx.params1['ncpus'] = 1 |
471 plot(stdparams_exact.std1['savedataname']) | 485 run(stdparams_approx.params1) |
472 | 486 utils.replot_approx(stdparams_approx.params1['savedataname'], |
487 algonames = None, # will read them from mat file | |
488 doshow=False, | |
489 dosave=True, | |
490 saveplotbase=stdparams_approx.params1['saveplotbase'], | |
491 saveplotexts=stdparams_approx.params1['saveplotexts']) | |
492 | |
493 #stdparams_approx.params2['ncpus'] = 1 | |
494 run(stdparams_approx.params2) | |
495 utils.replot_approx(stdparams_approx.params2['savedataname'], | |
496 algonames = None, # will read them from mat file | |
497 doshow=False, | |
498 dosave=True, | |
499 saveplotbase=stdparams_approx.params2['saveplotbase'], | |
500 saveplotexts=stdparams_approx.params2['saveplotexts']) | |
501 | |
502 #stdparams_approx.params3['ncpus'] = 1 | |
503 run(stdparams_approx.params3) | |
504 utils.replot_approx(stdparams_approx.params3['savedataname'], | |
505 algonames = None, # will read them from mat file | |
506 doshow=False, | |
507 dosave=True, | |
508 saveplotbase=stdparams_approx.params3['saveplotbase'], | |
509 saveplotexts=stdparams_approx.params3['saveplotexts']) | |
510 | |
511 #stdparams_approx.params4['ncpus'] = 1 | |
512 run(stdparams_approx.params4) | |
513 utils.replot_approx(stdparams_approx.params4['savedataname'], | |
514 algonames = None, # will read them from mat file | |
515 doshow=False, | |
516 dosave=True, | |
517 saveplotbase=stdparams_approx.params4['saveplotbase'], | |
518 saveplotexts=stdparams_approx.params4['saveplotexts']) | |
519 | |
473 # Script main | 520 # Script main |
474 if __name__ == "__main__": | 521 if __name__ == "__main__": |
475 | 522 |
476 #stdparams_approx.paramsl1prove['ncpus'] = 1 | 523 #stdparams_approx.paramsl1prove['ncpus'] = 1 |
477 #generateFigProveEll1() | 524 #generateFigProveEll1() |
480 | 527 |
481 # Run test parameters | 528 # Run test parameters |
482 #stdparams_approx.paramstest['ncpus'] = 1 | 529 #stdparams_approx.paramstest['ncpus'] = 1 |
483 #run(stdparams_approx.paramstest) | 530 #run(stdparams_approx.paramstest) |
484 #plot(stdparams_approx.paramstest['savedataname']) | 531 #plot(stdparams_approx.paramstest['savedataname']) |
485 utils.replot_approx(stdparams_approx.paramstest['savedataname'], | 532 #utils.replot_approx(stdparams_approx.paramstest['savedataname'], algonames = None,doshow=False,dosave=True,saveplotbase=stdparams_approx.paramstest['saveplotbase'],saveplotexts=stdparams_approx.paramstest['saveplotexts']) |
486 algonames = None, # will read them from mat file | 533 |
487 doshow=False, | 534 #stdparams_approx.params5['ncpus'] = 3 |
488 dosave=True, | 535 #run(stdparams_approx.params5) |
489 saveplotbase=stdparams_approx.paramstest['saveplotbase'], | 536 #utils.replot_approx(stdparams_approx.params5['savedataname'], |
490 saveplotexts=stdparams_approx.paramstest['saveplotexts']) | 537 # algonames = None, # will read them from mat file |
538 # doshow=False, | |
539 # dosave=True, | |
540 # saveplotbase=stdparams_approx.params5['saveplotbase'], | |
541 # saveplotexts=stdparams_approx.params5['saveplotexts']) | |
542 | |
543 # stdparams_approx.params3sl0['ncpus'] = 1 | |
544 # run(stdparams_approx.params3sl0) | |
545 # utils.replot_approx(stdparams_approx.params3sl0['savedataname'], | |
546 # algonames = None, # will read them from mat file | |
547 # doshow=False, | |
548 # dosave=True, | |
549 # saveplotbase=stdparams_approx.params3sl0['saveplotbase'], | |
550 # saveplotexts=stdparams_approx.params3sl0['saveplotexts']) | |
551 | |
552 #stdparams_approx.params3['ncpus'] = 1 | |
553 run(stdparams_approx.params3) | |
554 utils.replot_approx(stdparams_approx.params3['savedataname'], | |
555 algonames = None, # will read them from mat file | |
556 doshow=False, | |
557 dosave=True, | |
558 saveplotbase=stdparams_approx.params3['saveplotbase'], | |
559 saveplotexts=stdparams_approx.params3['saveplotexts']) | |
560 | |
561 #stdparams_approx.params4['ncpus'] = 1 | |
562 run(stdparams_approx.params4) | |
563 utils.replot_approx(stdparams_approx.params4['savedataname'], | |
564 algonames = None, # will read them from mat file | |
565 doshow=False, | |
566 dosave=True, | |
567 saveplotbase=stdparams_approx.params4['saveplotbase'], | |
568 saveplotexts=stdparams_approx.params4['saveplotexts']) |