def test_jointLocalMc1(self):
     """
     Updates computed by hand given:
     v = [45,20], l = 1
     p(q_1 = 20) = 0.5 
     p(q_1 = 30) = 0.5
     p(q_2 = 15) = 0.2
     p(q_2 = 20) =  0.8
     
     Under independent prices p(q_1,q_2) = p(q_1)p(q_2)
     Hence:
     p(q_1 = 20, q_2 = 15) = 0.1
     p(q_1 = 20, q_2 = 20) = 0.4
     p(q_1 = 30, q_2 = 15) = 0.1
     p(q_1 = 30, q_2 = 20) = 0.4
     
     The joint pdf is represented with 1000 samples. 
     100 samples of [20,15]
     400 samples of [20,20]
     100 samples of [30,15]
     400 samples of [30,20]
     
     Ground Truth Anwers:
     Starting at [25,25]
     1.1) b1 <- 25
     1.2) b2 <- 10
     2.1) b1 <- 45
     2.2) b2 <- 0
     3.1) b1 <- 25
     3.2) b2 <- 0
     
     Therefore, starting at [25,25] converges to [45,0] after 3 iterations
     """
     
     samples = numpy.zeros((1000,2))
     samples[:100,:] = numpy.asarray([20,15])
     samples[100:500,:] = numpy.asarray([20,20])
     samples[500:600,:] = numpy.asarray([30,15])
     samples[600:,:] = numpy.asarray([30,20])
     
     m=2
     l = 1
     v = [45,20]
     bundles = listBundles(m)
     revenue = msListRevenue(bundles, v, l)
     bids = numpy.asarray([25.,25.])
     
     bids[0] = jointLocalUpdateMc(bundles,revenue,bids,0,samples,True)
     print bids
     numpy.testing.assert_equal(bids[0], 25, "Update 1.1 Failed", True)
             
     bids[1] = jointLocalUpdateMc(bundles,revenue,bids,1,samples,True)
     print bids
     numpy.testing.assert_equal(bids[1], 10, "Update 1.2 Failed", True )
             
     bids[0] = jointLocalUpdateMc(bundles,revenue,bids,0,samples,True)
     print bids
     numpy.testing.assert_equal(bids[0], 45, "Update 2.1 Failed", True)
             
     bids[1] = jointLocalUpdateMc(bundles,revenue,bids,1,samples,True)
     print bids
     numpy.testing.assert_equal(bids[1], 0, "Update 2.2 Failed", True)
             
     bids[0] = jointLocalUpdateMc(bundles,revenue,bids,0,samples,True)
     print bids
     numpy.testing.assert_equal(bids[0], 45, "Update 3.1 Failed", True)
             
     bids[1] = jointLocalUpdateMc(bundles,revenue,bids,1,samples,True)
     print bids
     numpy.testing.assert_equal(bids[1], 0, "Update 3.2 Failed", True)
     
     bids = numpy.asarray([25.,25.])
     bids, converged, itr, tol = jointLocalMc(bundles, revenue, bids, samples, verbose=True,ret='all')
     print bids
     print converged
     print itr
     print tol
Beispiel #2
0
def main():
    desc="Compute jointLocal bids given v's, l's initial bids and parameters"
    
    parser = argparse.ArgumentParser(description=desc)
    
    parser.add_argument('-s','--samplesFile',dest='samplesFile',
                        required=True,type=str,
                        help='Samples (text file)')
    
    parser.add_argument('-v','--vfile',dest='vfile',
                        required=True,type=str,
                        help='Valuation v vector txt file.')
    
    parser.add_argument('-l','--lfile',dest='lfile',
                        required=True,type=str,
                        help='Valuation lambda txt file.')
    
    parser.add_argument('-ib','--initBidFile',dest='initBidFile',
                        required=True,type=str,
                        help='Initial Bids txt file.')
    
    parser.add_argument('-es','--evalSamples',dest='evalFile',
                        required=True,type=str,
                        help='Evaluation samples file.')
    
    parser.add_argument('-n','--name',dest='name',
                        required=False,type=str,
                        default='jointLocalMc',
                        help='output file name prefix.')
    
    parser.add_argument('-o','--odir',dest='odir',
                        required=True,type=str,
                        help='Output directory.')
    
    parser.add_argument('-mi','--maxitr', dest='maxitr',
                        required=False, default=100, type=int,
                        help='Maximum Update Iterations')
    
    parser.add_argument('-t','--tol',dest='tol',
                        required=False, default=1e-5,
                        type=float,help='L2 Update Stopping Tolerance')
    
    parser.add_argument('--verbose',dest='verbose',
                        required=False,default=False,
                        type=bool,help='Output debugg information')
    
    args = parser.parse_args()
    
    args.odir = os.path.realpath(args.odir)
    
    jointSamples = numpy.loadtxt(os.path.realpath(args.samplesFile))
    initBids     = numpy.loadtxt(os.path.realpath(args.initBidFile))
    vmat         = numpy.loadtxt(os.path.realpath(args.vfile))
    lmat         = numpy.loadtxt(os.path.realpath(args.lfile))
    evalSamples  = numpy.loadtxt(os.path.realpath(args.evalFile))
    
    m = initBids.shape[1]
    
    bundles = listBundles(m)
    
    bids = numpy.zeros(initBids.shape)
    es   = numpy.zeros(initBids.shape[0])
    
    for itr, initBid, v, l in zip(xrange(vmat.shape[0]),initBids,vmat,lmat):
        print 'Iteration = {0}'.format(itr)
        revenue = msListRevenue(bundles,v,l)
        
        bids[itr,:], converged, nItr, d = \
            jointLocalMc(bundles,revenue,initBid,jointSamples,
                       args.maxitr,args.tol,args.verbose,'all')
        
        brd = {}
        for b,r in zip(bundles,revenue):
            brd[tuple(b)] = r
        
        es[itr] = expectedSurplus_(brd, bids[itr,:], evalSamples)
        
        print '\t bid = {0}'.format(bids[itr,:])
        print '\t converged = {0}'.format(converged)
        print '\t Num. Iterations = {0}'.format(nItr)
        print '\t d = {0}'.format(d)
        print '\t Expected Surplus = {0}'.format(es[itr])
        
        
    numpy.savetxt(os.path.join(args.odir, args.name + '_bids.txt'), bids)
    numpy.savetxt(os.path.join(args.odir, args.name + '_expectedSurplus.txt'),es)
    
    with open(os.path.join(args.odir,args.name + '_stats.txt'),'w') as f:
        print >> f, numpy.mean(es)
        print >> f, numpy.var(es)