Пример #1
0
def sparse_grid_iter(n_agents, iDepth, iG, Lvalold):

    grid = TasmanianSG.TasmanianSparseGrid()

    k_range = np.array([k_bar, k_up])

    ranges = np.empty((n_agents, 2))

    for i in range(n_agents):
        ranges[i] = k_range

    iDim = n_agents

    grid.makeLocalPolynomialGrid(iDim, iOut, iDepth, which_basis, "localp")
    grid.setDomainTransform(ranges)

    aPoints = grid.getPoints()
    iNumP1 = aPoints.shape[0]
    aVals = np.empty([iNumP1, iOut])

    file = open("comparison1.txt", 'w')
    for iI in range(iNumP1):
        aVals[iI] = solveriter.iterate(aPoints[iI], n_agents, Lvalold,
                                       phi[iG])[0]

    grid.loadNeededPoints(aVals)  # Get interpolant at sparse grid

    #refinement level
    for iK in range(refinement_level):

        grid.setSurplusRefinement(fTol, 1,
                                  "fds")  #also use fds, or other rules
        aPoints = grid.getNeededPoints()
        #grid.plotPoints2D()
        print("Number of Points", grid.getNumPoints())
        aVals = np.empty([aPoints.shape[0], iOut])

        for iI in range(aPoints.shape[0]):
            # Solve the value function problem for all grid points
            aVals[iI] = solveriter.iterate(aPoints[iI], n_agents, Lvalold,
                                           phi[iG])[0]

        # Update interpolant
        grid.loadNeededPoints(aVals)

    #print(" {0:9d} {1:9d}  {2:1.2e}".format(iK+1, grid.getNumPoints()))
    grid2 = TasmanianSG.TasmanianSparseGrid()
    grid2.makeLocalPolynomialGrid(iDim, iOut, refinement_level + iDepth,
                                  which_basis, "localp")
    print("Max Number of Points", grid2.getNumPoints())

    #f=open("grid_iter.txt", 'w')
    #np.savetxt(f, aPoints, fmt='% 2.16f')
    #f.close()

    return grid


#======================================================================
Пример #2
0
def sparse_grid_iter(grid, valold_list, adaptive=False):

    # grid  = TasmanianSG.TasmanianSparseGrid()

    # k_range=np.array([k_bar, k_up])

    # ranges=np.empty((n_agents, 2))

    # for i in range(n_agents):
    #     ranges[i]=k_range

    # iDim=n_agents
    # iOut=1

    # grid.makeLocalPolynomialGrid(iDim, iOut, iDepth, which_basis, "localp")
    # grid.setDomainTransform(ranges)  ### Sets the lower and upper bound for each dimension

    aPoints = grid.getPoints()
    iNumP1 = aPoints.shape[0]

    if adaptive:
        # file=open("comparison1.txt", 'w')
        for i in range(1):
            grid.setSurplusRefinement(fTol, -1,
                                      "fds")  #also use fds, or other rules
            aPoints = grid.getNeededPoints()
            aVals = np.empty([aPoints.shape[0], 1])
            for iI in range(iNumP1):
                aVals[iI] = solveriter.iterate(aPoints[iI], n_agents,
                                               valold_list)[0]
                v = aVals[iI] * np.ones((1, 1))
                # to_print=np.hstack((aPoints[iI].reshape(1,n_agents), v))
                # np.savetxt(file, to_print, fmt='%2.16f')

            # file.close()
            grid.loadNeededPoints(aVals)

    else:
        aVals = np.empty([iNumP1, 1])
        # file=open("comparison1.txt", 'w')
        for iI in range(iNumP1):
            aVals[iI] = solveriter.iterate(aPoints[iI], n_agents,
                                           valold_list)[0]
            v = aVals[iI] * np.ones((1, 1))
            # to_print=np.hstack((aPoints[iI].reshape(1,n_agents), v))
            # np.savetxt(file, to_print, fmt='%2.16f')

        #file.close()
        grid.loadNeededPoints(aVals)

    f = open("grid_iter.txt", 'w')
    np.savetxt(f, aPoints, fmt='% 2.16f')
    f.close()

    return grid
Пример #3
0
def adaptive_sparse_grid_iter(n_agents, iDepth, refinement_level, fTol,
                              valold):

    grid = TasmanianSG.TasmanianSparseGrid()

    k_range = np.array([k_bar, k_up])

    ranges = np.empty((n_agents, 2))

    for i in range(n_agents):
        ranges[i] = k_range

    iDim = n_agents
    iOut = 1

    grid.makeLocalPolynomialGrid(iDim, iOut, iDepth, which_basis, "localp")
    grid.setDomainTransform(ranges)

    aPoints = grid.getPoints()
    iNumP1 = aPoints.shape[0]
    aVals = np.empty([iNumP1, 1])

    for iI in range(iNumP1):
        aVals[iI] = solveriter.iterate(aPoints[iI], n_agents, valold)[0]

    grid.loadNeededPoints(aVals)

    for iK in range(refinement_level):
        grid.setSurplusRefinement(fTol, 1,
                                  "fds")  #also use fds, or other rules
        aPoints = grid.getNeededPoints()
        aVals = np.empty([aPoints.shape[0], 1])
        for iI in range(aPoints.shape[0]):
            aVals[iI] = solveriter.iterate(aPoints[iI], n_agents, valold)[0]
        grid.loadNeededPoints(aVals)

    file = open("comparison1_1.txt", 'w')
    for iI in range(iNumP1):
        v = aVals[iI] * np.ones((1, 1))
        to_print = np.hstack((aPoints[iI].reshape(1, n_agents), v))
        np.savetxt(file, to_print, fmt='%2.16f')

    file.close()

    f = open("grid_iter_1.txt", 'w')
    np.savetxt(f, aPoints, fmt='% 2.16f')
    f.close()

    return grid


#======================================================================
Пример #4
0
def GPR_iter(iteration):
    
    
    # Load the model from the previous iteration step
    restart_data = filename + str(iteration-1) + ".pcl"
    with open(restart_data, 'rb') as fd_old:
        gp_old = pickle.load(fd_old)
        print "data from iteration step ", iteration -1 , "loaded from disk"
    fd_old.close()
    
    ##generate sample aPoints
    np.random.seed(666)   #fix seed
    dim = n_agents
    Xtraining = np.random.uniform(k_bar, k_up, (No_samples, dim))
    y = np.zeros(No_samples, float) # training targets    
    
    # solve bellman equations at training points
    for iI in range(len(Xtraining)):
        y[iI] = solver.iterate(Xtraining[iI], n_agents,gp_old)[0] 
    
    #print data for debugging purposes
    #for iI in range(len(Xtraining)):
        #print Xtraining[iI], y[iI]
  
    # Instantiate a Gaussian Process model  
    kernel = RBF() 

    # Instantiate a Gaussian Process model
    #kernel = 1.0 * RBF(length_scale=1.0, length_scale_bounds=(1e-1, 10.0))
    
    #kernel = 1.0 * RBF(length_scale=100.0, length_scale_bounds=(1e-1, 2e2)) \
    #+ WhiteKernel(noise_level=1, noise_level_bounds=(1e-3, 1e+0))   

    #kernel = 1.0 * RBF(length_scale=100.0, length_scale_bounds=(1e-1, 2e2)) 
    #kernel = 1.0 * Matern(length_scale=1.0, length_scale_bounds=(1e-1, 10.0),nu=1.5)
    
    gp = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=10)

    # Fit to data using Maximum Likelihood Estimation of the parameters
    gp.fit(Xtraining, y)    
     
    ##save the model to a file
    output_file = filename + str(iteration) + ".pcl"
    print output_file 
    with open(output_file, 'wb') as fd:
        pickle.dump(gp, fd, protocol=pickle.HIGHEST_PROTOCOL)
        print "data of step ", iteration ,"  written to disk"
        print " -------------------------------------------"
    fd.close()    
Пример #5
0
def sparse_grid_iter(n_agents, iDepth, valold, theta):
    grid1 = TasmanianSG.TasmanianSparseGrid()

    k_range=np.array([k_bar, k_up])

    ranges=np.empty((n_agents, 2))

    for i in range(n_agents):
        ranges[i]=k_range

    iDim=n_agents
    iOut=1

    # Level of grid before refinement
    grid1.makeLocalPolynomialGrid(iDim, iOut, iDepth, which_basis, "localp")
    grid1.setDomainTransform(ranges)

    aPoints=grid1.getPoints()
    iNumP1=aPoints.shape[0]
    aVals=np.empty([iNumP1, 1])

    for iI in range(iNumP1):
        aVals[iI]=solveriter.iterate(aPoints[iI], n_agents, valold, theta)[0]
        v=aVals[iI]*np.ones((1,1))

    grid1.loadNeededPoints(aVals)

    for iK in range(refinement_level):
        grid1.setSurplusRefinement(fTol, 1, "fds")   #also use fds, or other rules
        aPoints = grid1.getNeededPoints()
        aVals = np.empty([aPoints.shape[0], 1])
        for iI in range(iNumP1):
            aVals[iI]=solveriter.iterate(aPoints[iI], n_agents, valold, theta)[0]
            v=aVals[iI]*np.ones((1,1))
        grid1.loadNeededPoints(aVals)
    return grid1
Пример #6
0
def sparse_grid_iter(n_agents, iDepth, valold):

    grid = TasmanianSG.TasmanianSparseGrid()

    k_range = np.array([k_bar, k_up])

    ranges = np.empty((n_agents, 2))

    for i in range(n_agents):
        ranges[i] = k_range

    iDim = n_agents
    iOut = 1

    grid.makeLocalPolynomialGrid(iDim, iOut, iDepth, which_basis, "localp")
    grid.setDomainTransform(ranges)

    aPoints = grid.getPoints()
    iNumP1 = aPoints.shape[0]
    aVals = np.empty([iNumP1, len(thetagrid)])
    EV = np.empty([iNumP1, 1])
    file = open("comparison1.txt", 'w')
    for iI in range(iNumP1):  #i think this loops through the kgrid
        for tt, theta in enumerate(thetagrid):
            aVals[iI, tt] = solveriter.iterate(aPoints[iI], n_agents, valold,
                                               theta)[0]
            #print(aVals[iI,tt],iI,tt)
            v = aVals[iI, tt] * np.ones((1, 1))
            to_print = np.hstack((aPoints[iI].reshape(1, n_agents), v))
            #np.savetxt(file, to_print, fmt='%2.16f')
        EV[iI] = 0.2 * aVals[iI, 0] + 0.2 * aVals[iI, 1] + 0.2 * aVals[
            iI, 2] + 0.2 * aVals[iI, 3] + 0.2 * aVals[iI, 4]
        #print(aVals)
        #pdb.set_trace()
    file.close()
    grid.loadNeededPoints(EV)

    f = open("grid_iter.txt", 'w')
    np.savetxt(f, aPoints, fmt='% 2.16f')
    f.close()
    #$print(v) #UB
    #print(aPoints)
    return grid, aVals, aPoints
Пример #7
0
def sparse_grid_iter_adap(paramL, valold_list):
    ## Not working
    n_agents = paramL['n_agents']
    
    grid  = TasmanianSG.TasmanianSparseGrid()

    k_range=np.array([paramL['k_bar'], paramL['k_up']])

    ranges=np.empty((n_agents, 2))


    for i in range(n_agents):
        ranges[i]=k_range

    iDim=n_agents
    iOut=1
    fTol = 1.E-5

    grid.makeLocalPolynomialGrid(iDim, iOut, paramL['iDepth'], paramL['which_basis'], "localp")
    grid.setDomainTransform(ranges)

    aPoints=grid.getPoints()
    iNumP1=aPoints.shape[0]
    aVals=np.empty([iNumP1, 1]) ## Change to 5d
    
    for iK in range(3):
        grid.setSurplusRefinement(fTol, -1, "fds")   #also use fds, or other rules
        aPoints = grid1.getNeededPoints()
        aVals = np.empty([aPoints.shape[0], 1])
        for iI in range(aPoints.shape[0]):
            aVals[iI]= solveriter.iterate(aPoints[iI], paramL, valold_list)[0]
            v=aVals[iI]*np.ones((1,1))
            
        grid.loadNeededPoints(aVals)

    
    f=open("grid_iter.txt", 'w')
    np.savetxt(f, aPoints, fmt='% 2.16f')
    f.close()
    
    return grid
Пример #8
0
def sparse_grid_iter(n_agents, iDepth, valold):

    grid = TasmanianSG.TasmanianSparseGrid()

    k_range = np.array([k_bar, k_up])

    ranges = np.empty((n_agents, 2))

    for i in range(n_agents):
        ranges[i] = k_range

    iDim = n_agents
    iOut = 1

    grid.makeLocalPolynomialGrid(iDim, iOut, iDepth, which_basis, "localp")
    grid.setDomainTransform(ranges)

    aPoints = grid.getPoints()
    iNumP1 = aPoints.shape[0]
    aVals = np.empty([iNumP1, 1])

    print("Number of points in grid is", iNumP1)

    file = open("comparison1.txt", 'w')
    for iI in range(iNumP1):
        print("Solving for point", iI)

        aVals[iI] = solveriter.iterate(aPoints[iI], n_agents, valold)[0]
        v = aVals[iI] * np.ones((1, 1))
        to_print = np.hstack((aPoints[iI].reshape(1, n_agents), v))
        np.savetxt(file, to_print, fmt='%2.16f')

    file.close()
    grid.loadNeededPoints(aVals)

    f = open("grid_iter.txt", 'w')
    np.savetxt(f, aPoints, fmt='% 2.16f')
    f.close()

    return grid
Пример #9
0
def sparse_grid_iter(n_agents, iDepth, valold_list):
    k_range = np.array([k_bar, k_up])

    ranges = np.empty((n_agents, 2))

    for i in range(n_agents):
        ranges[i] = k_range

    iDim = n_agents
    iOut = 1

    grid_list = []
    points_list = []
    num_points = []

    for i in range(ntheta):
        grid_list.append(TasmanianSG.TasmanianSparseGrid())
        grid_list[i].makeLocalPolynomialGrid(iDim, iOut, iDepth, which_basis,
                                             "localp")
        grid_list[i].setDomainTransform(ranges)

        points_list.append(grid_list[i].getPoints())
        num_points.append(points_list[i].shape[0])

    for itheta in range(ntheta):
        theta_init = theta_range[itheta]
        aPoints = points_list[itheta]
        iNumP1 = num_points[itheta]
        aVals = np.empty((iNumP1, 1))
        file = open("comparison1_" + str(theta_range[itheta]) + "_.txt", 'w')
        for iI in range(iNumP1):
            aVals[iI] = solveriter.iterate(aPoints[iI], theta_init, n_agents,
                                           valold_list)[0]
            v = aVals[iI] * np.ones((1, 1))
            to_print = np.hstack((aPoints[iI].reshape(1, n_agents), v))
            np.savetxt(file, to_print, fmt='%2.16f')
        file.close()
        grid_list[itheta].loadNeededPoints(aVals)

    return grid_list
Пример #10
0
def sparse_grid_iter(paramL, valold_list):
    n_agents = paramL['n_agents']
    
    grid  = TasmanianSG.TasmanianSparseGrid()

    k_range=np.array([paramL['k_bar'], paramL['k_up']])

    ranges=np.empty((n_agents, 2))


    for i in range(n_agents):
        ranges[i]=k_range

    iDim=n_agents
    iOut=1

    grid.makeLocalPolynomialGrid(iDim, iOut, paramL['iDepth'], paramL['which_basis'], "localp")
    grid.setDomainTransform(ranges)

    aPoints=grid.getPoints()
    iNumP1=aPoints.shape[0]
    aVals=np.empty([iNumP1, 1]) ## Change to 5d
    
    file=open("comparison1.txt", 'w')
    for iI in range(iNumP1):
        aVals[iI]= solveriter.iterate(aPoints[iI], paramL, valold_list)[0]
        v=aVals[iI]*np.ones((1,1))
        to_print=np.hstack((aPoints[iI].reshape(1,n_agents), v))
        np.savetxt(file, to_print, fmt='%2.16f')
        
    file.close()
    grid.loadNeededPoints(aVals)
    
    f=open("grid_iter.txt", 'w')
    np.savetxt(f, aPoints, fmt='% 2.16f')
    f.close()
    
    return grid
def ad_grid_iter(n_agents, iDepth, valold):
    # valold is a list

    grid = TasmanianSG.TasmanianSparseGrid()

    k_range = np.array([k_bar, k_up])

    ranges = np.empty((n_agents, 2))

    for i in range(n_agents):
        ranges[i] = k_range

    iDim = n_agents
    iOut = 1
    # TODO: parameterize this
    refinement_level = 1
    fTol = 1.E-5

    # level of grid before refinement
    grid.makeLocalPolynomialGrid(iDim, iOut, iDepth, which_basis, "localp")
    grid.setDomainTransform(ranges)

    aPoints = grid.getPoints()
    iNumP1 = aPoints.shape[0]
    aVals = np.empty([iNumP1, 1])
    aVals1 = np.empty([iNumP1, 1])

    for iI in range(iNumP1):
        aValTemp = 0
        for sIdx in range(5):
            aValTemp += (1. / 5) * solveriter.iterate(aPoints[iI], n_agents,
                                                      valold[sIdx], sIdx)[0]
        aVals[iI] = aValTemp
    #print(aVals)
    grid.loadNeededPoints(aVals)

    for ik in range(refinement_level):
        grid.setSurplusRefinement(fTol, 1,
                                  "fds")  #also use fds, or other rules
        aPoints = grid.getNeededPoints()
        iNumP1 = aPoints.shape[0]
        aVals = np.empty([iNumP1, 1])

        print(ik)

        file = open("comparison1.txt", 'w')
        for iI in range(iNumP1):
            aValTemp = 0
            for sIdx in range(5):
                aValTemp += (1. / 5) * solveriter.iterate(
                    aPoints[iI], n_agents, valold[sIdx], sIdx)[0]
            aVals[iI] = aValTemp
            v = aVals[iI] * np.ones((1, 1))
            to_print = np.hstack((aPoints[iI].reshape(1, n_agents), v))
            np.savetxt(file, to_print, fmt='%2.16f')

        print(aVals)
        file.close()
        grid.loadNeededPoints(aVals)

    f = open("grid_iter.txt", 'w')
    np.savetxt(f, aPoints, fmt='% 2.16f')
    f.close()

    return grid
Пример #12
0
def sparse_grid_iter(n_agents, iDepth, valold, refinement_level, fTol,
                     theta_vec, theta_prob):

    grid = TasmanianSG.TasmanianSparseGrid()

    k_range = np.array([k_bar, k_up])

    ranges = np.empty((n_agents, 2))

    for i in range(n_agents):
        ranges[i] = k_range

    iDim = n_agents
    iOut = 1
    #level of grid before refinement
    grid.makeLocalPolynomialGrid(iDim, iOut, iDepth, which_basis, "localp")
    grid.setDomainTransform(ranges)

    aPoints = grid.getPoints()
    iNumP1 = aPoints.shape[0]
    aVals = np.empty([iNumP1, 1])

    file = open("comparison1.txt", 'w')
    for iI in range(iNumP1):
        expectation = [
            solveriter.iterate(aPoints[iI], n_agents, valold, theta)[0]
            for theta in theta_vec
        ]
        expectation = np.array(expectation)
        expectation = np.dot(expectation, theta_prob.T)
        #expectation = np.empty_like(aVals[iI])
        #for iT, theta  in enumerate(theta_vec):
        #    new_expect = solveriter.iterate(aPoints[iI], n_agents, valold, theta)[0]
        #    expectation += new_expect*theta_prob[iT]
        aVals[
            iI] = expectation  # We need to do something on changing this Valold
        v = aVals[iI] * np.ones((1, 1))
        to_print = np.hstack((aPoints[iI].reshape(1, n_agents), v))
        np.savetxt(file, to_print, fmt='%2.16f')

    #file.close()
    grid.loadNeededPoints(aVals)
    #refinement level
    for iK in range(refinement_level):
        grid.setSurplusRefinement(fTol, 1,
                                  "fds")  #also use fds, or other rules
        aPoints = grid.getNeededPoints()
        aVals = np.empty([aPoints.shape[0], 1])
        for iI in range(aPoints.shape[0]):
            expectation = [
                solveriter.iterate(aPoints[iI], n_agents, valold, theta)[0]
                for theta in theta_vec
            ]
            expectation = np.array(expectation)
            expectation = np.dot(expectation, theta_prob.T)
            aVals[
                iI] = expectation  # We need to do something on changing this Valold
            v = aVals[iI] * np.ones((1, 1))
            to_print = np.hstack((aPoints[iI].reshape(1, n_agents), v))
            np.savetxt(file, to_print, fmt='%2.16f')

        grid.loadNeededPoints(aVals)

    file.close()
    f = open("grid_iter.txt", 'w')
    np.savetxt(f, aPoints, fmt='% 2.16f')
    f.close()

    return grid
def sparse_grid_iter(n_agents, valold):
    
    comm=MPI.COMM_WORLD
    rank=comm.Get_rank()
    size = comm.Get_size()
    
    grid  = TasmanianSG.TasmanianSparseGrid()
    
    aPoints=0
    iNumP1_buf=np.zeros(1, int)
    iNumP1=iNumP1_buf[0]
    aVals_gathered=0
    
    if rank==0:
        k_range=np.array([k_bar, k_up])

        ranges=np.empty((n_agents, 2))


        for i in range(n_agents):
            ranges[i]=k_range

        iDim=n_agents

        grid.makeLocalPolynomialGrid(iDim, iOut, iDepth, which_basis, "localp")
        grid.setDomainTransform(ranges)

        aPoints=grid.getPoints()
        
        f=open("grid_iter.txt", 'a')
        np.savetxt(f, aPoints, fmt='% 2.5f')
        f.close()
        
        iNumP1=aPoints.shape[0]
        iNumP1_buf[0]=iNumP1
        aVals_gathered=np.empty((iNumP1, 1))
        
    
    comm.Barrier()
    comm.Bcast(iNumP1_buf, root=0)
    iNumP1=iNumP1_buf[0]
    
    
    nump=iNumP1//size
    r=iNumP1 % size
    
    if rank<r:
        nump+=1
    
    displs_scat=np.empty(size)
    sendcounts_scat=np.empty(size)
    
    displs_gath=np.empty(size)
    sendcounts_gath=np.empty(size)
    
    for i in range(r):
        displs_scat[i]=i*(1+iNumP1//size)*n_agents
        sendcounts_scat[i]=(1+iNumP1//size)*n_agents
        
        displs_gath[i]=i*(1+iNumP1//size)
        sendcounts_gath[i]=(1+iNumP1//size)
        
    for i in range(r, size):
        displs_scat[i]=(r+i*(iNumP1//size))*n_agents
        sendcounts_scat[i]=(iNumP1//size)*n_agents
        
        displs_gath[i]=r+i*(iNumP1//size)
        sendcounts_gath[i]=(iNumP1//size)
        
    local_aPoints=np.empty((nump, n_agents))
    
    comm.Scatterv([aPoints, sendcounts_scat, displs_scat, MPI.DOUBLE], local_aPoints)
    
    local_aVals=np.empty([nump, 1])
    
    file=open("comparison1.txt", 'w') 
    for iI in range(nump):
        local_aVals[iI]=solveriter.iterate(local_aPoints[iI], n_agents, valold)[0]
        v_and_rank=np.array([[local_aVals[iI], rank]])
        to_print=np.hstack((local_aPoints[iI].reshape(1,n_agents), v_and_rank))
        np.savetxt(file, to_print, fmt='%2.16f')
    
    file.close()
        
    comm.Gatherv(local_aVals, [aVals_gathered, sendcounts_gath, displs_gath, MPI.DOUBLE])
    
    if rank==0:
        grid.loadNeededPoints(aVals_gathered)
        
    return grid
Пример #14
0
def sparse_grid_iter(n_agents, iDepth, valold):

    grid = TasmanianSG.TasmanianSparseGrid()

    k_range = np.array([k_bar, k_up])

    ranges = np.empty((n_agents, 2))

    for i in range(n_agents):
        ranges[i] = k_range

    iDim = n_agents
    iOut = 1

    grid.makeLocalPolynomialGrid(iDim, iOut, iDepth, which_basis, "localp")
    grid.setDomainTransform(ranges)

    # 1 : Make grid
    aPoints = grid.getPoints()
    # Nb points on your grid
    iNumP1 = aPoints.shape[0]
    print(iNumP1)

    aVals = np.empty([iNumP1, 1])

    file = open("comparison1.txt", 'w')
    for iI in range(iNumP1):
        # 2 : Evaluate the function at each point
        aVals[iI] = solveriter.iterate(aPoints[iI], n_agents, valold)[0]
        v = aVals[iI] * np.ones((1, 1))
        to_print = np.hstack((aPoints[iI].reshape(1, n_agents), v))
        np.savetxt(file, to_print, fmt='%2.16f')

    file.close()
    # 3 : estimate the interpolant \alpha_{j,i} (the parameters)
    grid.loadNeededPoints(aVals)

    #refinement level --> adaptative part
    for iK in range(refinement_level):
        # 1.B.1 Where to add grid points
        grid.setSurplusRefinement(fTol, 1, "fds")

        # 1.B.2 Create the new ADAPTIVE grid
        aPoints = grid.getNeededPoints()

        # Nb of points on this new grid
        print(iNumP1)
        iNumP1 = aPoints.shape[0]
        aVals = np.empty([iNumP1, 1])

        for iI in range(iNumP1):
            # print("valold is", valold[0])
            # 2.B Evaluate the value function at these new points
            aVals[iI] = solveriter.iterate(aPoints[iI], n_agents, valold)[0]
        print("Refinement level", iK)

        # 3.B : estimate the interpolant for these new points
        grid.loadNeededPoints(aVals)

    f = open("grid_iter.txt", 'w')
    np.savetxt(f, aPoints, fmt='% 2.16f')
    f.close()

    return grid


#======================================================================