Exemplo n.º 1
0
def make_intercept_regression_plot(expname, default, center, affine, index, index_test, savedir):
    rank = comm.get_rank()
    
    if center is not None:
        comm.resize(center.world_size)
        default_reg = get_regression(default, index, index_test)
        center_reg = get_regression(center, index, index_test)
        comm.reset()
    if affine is not None:
        affine_reg = get_regression(affine, index, index_test)
    
    if rank == 0:
        # Regression Comp Plot
        fig, ax = plt.subplots(1,1)
        ax.set_ylabel('Meter Voltage (V)')
        plot_train_test(ax, center, index, index_test)
        t = np.linspace(0, 24, len(index)+len(index_test))
        ax.plot(t, default_reg.T, label=f'Regression - Default', linestyle='--', color='tab:purple')
        ax.plot(t, center_reg.T, label=f'Regression - Center', linestyle='-', color='black')
        if affine is not None:
            ax.plot(t, affine_reg.T, label=f'Regression - Affine', linestyle=':', color='tab:green')
        ax.legend()
        ax.set_xlabel('Time (h)')
        fig.tight_layout()
        fig.savefig(os.path.join(savedir, f'{expname}regression.png'), dpi=300)
        plt.close(fig)
def make_thm1_plot(expname, default, center, savedir, no_reg=False):
    rank = comm.get_rank()
    if rank == 0:
        fig, ax = plt.subplots(1, 2)
        ax[0].set_xlabel('Iterations')
        ax[1].set_xlabel('Iterations')
    for i, mon in enumerate([default, center]):
        comm.barrier()
        if mon is None:
            continue

        size = mon.world_size
        comm.resize(size)

        if rank == 0:
            global_data = get_dataframe(mon)

        local_data = get_dataframe(mon, local=True)
        local_data.replace(np.nan, 0)
        if no_reg:
            local_subproblem = np.array(local_data['subproblem'] -
                                        local_data['gk'])
        else:
            local_subproblem = np.array(local_data['subproblem'])

        local_subproblem = comm.reduce(local_subproblem, op='SUM', root=0)

        if rank == 0:
            ax[i].set_xlabel("Iterations")
            iters = np.asarray(local_data['i_iter'])
            label = r"$\sum_k \Gamma_{k}^{\sigma'}" + (r'-g_{[k]}$'
                                                       if no_reg else "$")
            ax[i].semilogy(iters,
                           local_subproblem,
                           color='tab:cyan',
                           linestyle='--',
                           label=label)

            y_axis = 'f' if no_reg else 'P'
            label = r"$f(Ax)$" if no_reg else r"$\mathcal{O}_A(x)$"
            ax[i].semilogy('i_iter',
                           y_axis,
                           '',
                           data=global_data,
                           color='tab:orange',
                           label=label)

    if rank == 0:
        ax[1].legend(loc='best')
        fig.tight_layout()

        suf = '_no_reg' if no_reg else ''
        fig.savefig(os.path.join(savedir, f'{expname}thm1{suf}.png'), dpi=300)
        plt.close(fig)
    comm.reset()
def make_stop_plot(expname, default, center, savedir):
    rank = comm.get_rank()
    for mon in [default, center]:
        comm.barrier()
        if mon is None:
            continue

        size = mon.world_size
        comm.resize(size)

        global_data = get_dataframe(mon)

        local_data = get_dataframe(mon, local=True)
        sendbuf = np.array(local_data['delta_xk'])
        local_updates = None
        if rank == 0:
            local_updates = np.empty([size, len(sendbuf)])
        comm.comm.Gather(sendbuf, local_updates, root=0)

        if rank == 0:
            fig, ax_l = plt.subplots(1, 1)
            ax_r = plt.twinx(ax=ax_l)
            ax_l.set_xlabel('Iterations')
            ax_l.set_ylabel(r'$\|\|\Delta x_{k}\|\|$')
            ax_r.set_ylabel(r'$f(Ax)$')

            iters = np.asarray(local_data['i_iter'])
            for k in range(size):
                ax_l.semilogy(iters,
                              local_updates[k, :],
                              linestyle='--',
                              label=r'$\|\|\Delta x_{k}\|\|$')
            ax_r.plot('i_iter',
                      'f',
                      '',
                      data=global_data,
                      color='black',
                      label='$f(Ax)$')

            ymin, ymax = ax_r.get_ylim()
            dist = ymax - ymin
            if dist < 0.01:
                ymax += (0.01 - dist) / 2
                ymin -= (0.01 - dist) / 2
                ax_r.set_ylim(ymin, ymax)

            fig.tight_layout()
            fig.savefig(os.path.join(savedir, f'{expname}{mon.name}_stop.png'),
                        dpi=300)
            plt.close(fig)
        comm.reset()
Exemplo n.º 4
0
def make_intercept_local_cert_plot(expname, default, center, savedir, type='gap'):
    rank = comm.get_rank()
    for mon in [default, center]:
        comm.barrier()
        if mon is None:
            continue

        size = mon.world_size
        comm.resize(size)

        global_data = get_dataframe(mon)

        local_data = get_dataframe(mon, local=True)
        sendbuf = np.abs(np.array(local_data[f'cert_{type}']))
        local_updates = None
        if rank == 0:
            local_updates = np.empty([size, len(sendbuf)])
        comm.comm.Gather(sendbuf, local_updates, root=0)

        if rank == 0:
            fig, ax_l = plt.subplots(1, 1)
            fig.set_size_inches(6.5, 3.5)
            ax_r = plt.twinx(ax=ax_l)
            ax_l.set_xlabel('Iterations')
            label = 'Local Gap' if type=='gap' else 'Local CV'
            ax_l.set_ylabel(label)
            ax_r.set_ylabel(r'$f(Ax)$')
            iters = np.asarray(local_data['i_iter'])
            for k in range(size):
                ax_l.semilogy(iters, local_updates[k,:], linestyle='--', label=label)
            data = np.abs(global_data['gap'])
            ax_r.semilogy('i_iter', data, '', data=global_data, color='black', label='$f(Ax)$')
            
            fig.tight_layout()
            fig.savefig(os.path.join(savedir, f'{expname}{mon.name}_cert_{type}.png'), dpi=300)
            plt.close(fig)
        comm.reset()