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'])