def settingAE3():
    ar_dyn = np.array([0.6, -0.5, 0.4, -0.4, 0.3])
    ma_dyn = np.array([0.3, -0.2])
    mean, noise_magnitude = 0, 0.3
    p = 10
    d = 1
    n = 5

    T = 100

    print("Setting ae 3 started at " + str(datetime.datetime.now()),
          flush=True)

    exp = Experiment()

    exp.initialize(metrics=['ae'], timesteps=T, n_runs=n)

    #problem
    exp.add_problem('ExperimentSetting3-v0', {}, name='III')

    val = [8, 16, 32, 64]
    hp = [10, 1, 0.1, 0.01, 0.001, 0.0001]
    for p in val:
        for lr in hp:
            exp.add_method(
                'RealAR', {
                    'p': p,
                    'optimizer': RealOGD(loss=ae, hyperparameters={'lr': lr})
                },
                name='ArmaOGD_{0:2d}_{1:2.4f}'.format(p, lr))

    print("Setting ae 3 tuned at " + str(datetime.datetime.now()), flush=True)

    exp.scoreboard(n_digits=10, metric='ae')
def settingAE5():
    T = 100

    print("Setting ae 5 started at " + str(datetime.datetime.now()),
          flush=True)
    exp = Experiment()
    exp.initialize(metrics=['ae'], timesteps=T, n_runs=5)
    exp.add_problem('ExperimentSetting5-v0', name='V')

    val = [8, 16, 32, 64]
    hp = [10, 1, 0.1, 0.01, 0.001, 0.0001]
    for p in val:
        print("Setting ae 5 p = " + str(p) + " started.", flush=True)
        for lr in hp:
            exp.add_method(
                'ArimaAR', {
                    'p': p,
                    'd': 2,
                    'optimizer': RealOGD(loss=ae, hyperparameters={'lr': lr})
                },
                name='ArimaOGD_{0:2d}_{1:2.4f}'.format(p, lr))

    print("Setting ae 5 tuned at " + str(datetime.datetime.now()), flush=True)
    exp.scoreboard(n_digits=10, metric='ae')
def settingSE2():
    n = 20
    T = 10000

    print("Setting 2 SE started at " + str(datetime.datetime.now()),
          flush=True)

    exp = Experiment()

    exp.initialize(timesteps=T, n_runs=n)

    #problem
    exp.add_problem('ExperimentSetting2-v0', name='II')

    exp.add_method('RealAR', {
        'p': 8,
        'optimizer': RealOGD(hyperparameters={'lr': 10})
    },
                   name='ARMA-OGD')
    exp.add_method(
        'RealAR', {
            'p': 8,
            'optimizer': RealONS(hyperparameters={
                'eps': 10.0,
                'eta': 1.0
            })
        },
        name='ARMA-ONS')

    exp.add_method('HedgeAR', {'p': 16, 'c': -1}, name='Hedge-FTRL')
    exp.add_method('HedgeARSE', {'p': 16, 'c': -1}, name='Hedge-ONS')

    print("Setting 2 SE finished at " + str(datetime.datetime.now()),
          flush=True)

    exp.scoreboard(n_digits=10)

    exp.graph(save_as=store_directory + "papersetting2SE.pdf",
              avg_regret=True,
              size=15,
              start_time=100,
              dpi=100,
              save_csv_path=store_directory + 'papersetting2SE')
def settingAE8():
    d = 2
    n = 20
    T = 10000

    print("Setting ae 8 started at " + str(datetime.datetime.now()),
          flush=True)

    exp = Experiment()

    exp.initialize(metrics=['ae'], timesteps=T, n_runs=n)

    #problem
    exp.add_problem('ExperimentSetting8-v0', name='VIII')

    exp.add_method('RealAR', {
        'p': 8,
        'optimizer': RealOGD(loss=ae, hyperparameters={'lr': 10.0})
    },
                   name='ARMA-OGD')
    exp.add_method('ArimaAR', {
        'p': 16,
        'd': d,
        'optimizer': RealOGD(loss=ae, hyperparameters={'lr': 0.1})
    },
                   name='ARIMA-OGD')

    exp.add_method('HedgeAR', {
        'p': 16,
        'c': -1,
        'loss': ae
    },
                   name='Hedge-FTRL')

    print("Setting ae 8 finished at " + str(datetime.datetime.now()),
          flush=True)

    exp.scoreboard(n_digits=10, metric='ae')

    exp.graph(save_as=store_directory + "papersetting8_AE.pdf",
              avg_regret=True,
              size=15,
              start_time=100,
              dpi=100,
              metric='ae',
              save_csv_path=store_directory + "papersetting8_MA")
def settingAE5():
    ar_dyn = np.array([0.6, -0.5, 0.4, -0.4, 0.3])
    ma_dyn = np.array([0.3, -0.2])
    mean, noise_magnitude = 0, 0.3
    d = 2
    n = 20
    T = 10000

    print("Setting ae 5 started at " + str(datetime.datetime.now()),
          flush=True)

    exp = Experiment()

    exp.initialize(metrics=['ae'], timesteps=T, n_runs=n)

    #problem
    exp.add_problem('ExperimentSetting5-v0', {
        'p': ar_dyn,
        'q': ma_dyn,
        'c': mean,
        'noise_magnitude': noise_magnitude
    },
                    name='V')

    exp.add_method('RealAR', {
        'p': 16,
        'optimizer': RealOGD(loss=ae, hyperparameters={'lr': 0.1})
    },
                   name='ARMA-OGD')
    exp.add_method('ArimaAR', {
        'p': 16,
        'd': d,
        'optimizer': RealOGD(loss=ae, hyperparameters={'lr': 1.0})
    },
                   name='ARIMA-OGD')

    exp.add_method('HedgeAR', {
        'p': 16,
        'c': -1,
        'loss': ae
    },
                   name='Hedge-FTRL')

    print("Setting ae 5 finished at " + str(datetime.datetime.now()),
          flush=True)

    exp.scoreboard(n_digits=10, metric='ae')

    exp.graph(save_as=store_directory + "papersetting5_AE.pdf",
              avg_regret=True,
              size=15,
              start_time=100,
              dpi=100,
              metric='ae',
              save_csv_path=store_directory + 'papersetting5_AE')
def settingSE1():
    ar_dyn = np.array([0.6, -0.5, 0.4, -0.4, 0.3])
    ma_dyn = np.array([0.3, -0.2])
    mean, noise_magnitude = 0, 0.3
    n = 20
    T = 10000

    print("Setting 1 SE started at " + str(datetime.datetime.now()),
          flush=True)

    exp = Experiment()

    exp.initialize(timesteps=T, n_runs=n)

    #problem
    exp.add_problem('ARMA-v0', {
        'p': ar_dyn,
        'q': ma_dyn,
        'c': mean,
        'noise_magnitude': noise_magnitude
    },
                    name='I')

    exp.add_method(
        'RealAR', {
            'p': 8,
            'optimizer': RealONS(hyperparameters={
                'eps': 1.0,
                'eta': 1.0
            })
        },
        name='ARMA-ONS')
    exp.add_method('RealAR', {
        'p': 8,
        'optimizer': RealOGD(hyperparameters={'lr': 10})
    },
                   name='ARMA-OGD')

    exp.add_method('HedgeAR', {'p': 16, 'c': -1}, name='Hedge-FTRL')
    exp.add_method('HedgeARSE', {'p': 16, 'c': -1}, name='Hedge-ONS')

    print("Setting 1 SE finished at " + str(datetime.datetime.now()),
          flush=True)

    exp.scoreboard(n_digits=10)

    exp.graph(save_as=store_directory + "papersetting1SE.pdf",
              avg_regret=True,
              size=15,
              start_time=100,
              dpi=100,
              save_csv_path=store_directory + 'papersetting1SE')
def settingSE2():
    T = 100
    hp1 = np.array([10, 1, 0.1, 0.01, 0.001, 0.0001])
    hp2 = np.array([10, 1, 0.1, 0.01, 0.001, 0.0001])

    print("Setting 2 SE started at " + str(datetime.datetime.now()),
          flush=True)
    exp = Experiment()
    exp.initialize(timesteps=T, n_runs=5)
    exp.add_problem('ExperimentSetting2-v0', {}, name='II')

    val = [8, 16, 32, 64]
    for p in val:
        print("setting 2 SE p = " + str(p) + " started.", flush=True)
        for lr in hp1:
            param = {'lr': lr}
            exp.add_method('RealAR', {
                'p': p,
                'optimizer': RealOGD(hyperparameters=param)
            },
                           name='OGD_{0}'.format(lr))

        for eta in hp1:
            for eps in hp2:
                param = {'eps': eps, 'eta': eta}
                exp.add_method('RealAR', {
                    'p': p,
                    'optimizer': RealONS(hyperparameters=param)
                },
                               name='ONS_{0}_{1}'.format(eta, eps))

    print("Setting 2 SE tuned at " + str(datetime.datetime.now()), flush=True)
    exp.scoreboard(n_digits=10)
def settingAE7():
    d = 1
    n = 5
    T = 100

    print("Setting ae Unemployment started at " + str(datetime.datetime.now()),
          flush=True)

    exp = Experiment()

    exp.initialize(metrics=['ae'], timesteps=T, n_runs=n)

    #problem
    exp.add_problem('Unemployment-v0', name='VII')

    val = [8, 16, 32, 64]
    hp = [10, 1, 0.1, 0.01, 0.001, 0.0001]
    for p in val:
        for lr in hp:
            exp.add_method(
                'RealAR', {
                    'p': p,
                    'optimizer': RealOGD(loss=ae, hyperparameters={'lr': lr})
                },
                name='ArmaOGD_{0:2d}_{1:2.4f}'.format(p, lr))
            exp.add_method(
                'ArimaAR', {
                    'p': p,
                    'd': 2,
                    'optimizer': RealOGD(loss=ae, hyperparameters={'lr': lr})
                },
                name='ArimaOGD_{0:2d}_{1:2.4f}'.format(p, lr))

    print("Setting ae Unemployment tuned at " + str(datetime.datetime.now()),
          flush=True)
    exp.scoreboard(n_digits=10, metric='ae')
def setting8():
    T = 100
    print("Setting CarReg SE started at " + str(datetime.datetime.now()),
          flush=True)
    exp = Experiment()
    exp.initialize(timesteps=T, n_runs=5)
    exp.add_problem('ExperimentSetting8-v0', name='VIII')

    val = [8, 16, 32, 64]
    hp = [10, 1, 0.1, 0.01, 0.001, 0.0001]
    for p in val:
        for lr in hp:
            exp.add_method('AutoRegressor', {
                'p': p,
                'optimizer': RealOGD(hyperparameters={'lr': lr})
            },
                           name='ArmaOGD_{0:2d}_{1:2.4f}'.format(p, lr))
            exp.add_method('ArimaAR', {
                'p': p,
                'd': 2,
                'optimizer': RealOGD(hyperparameters={'lr': lr})
            },
                           name='ArimaOGD_{0:2d}_{1:2.4f}'.format(p, lr))
        for eps in hp:
            for eta in hp:
                exp.add_method('AutoRegressor', {
                    'p':
                    p,
                    'optimizer':
                    RealONS(hyperparameters={
                        'eps': eps,
                        'eta': eta
                    })
                },
                               name='ArmaONS_{0:2d}_{1:2.4f}_{2:2.4f}'.format(
                                   p, eps, eta))
                exp.add_method('ArimaAR', {
                    'p':
                    p,
                    'd':
                    2,
                    'optimizer':
                    RealONS(hyperparameters={
                        'eps': eps,
                        'eta': eta
                    })
                },
                               name='ArimaONS_{0:2d}_{1:2.4f}_{2:2.4f}'.format(
                                   p, eps, eta))

    print("Setting CarReg SE tuned at " + str(datetime.datetime.now()),
          flush=True)
    exp.scoreboard(n_digits=10)
def settingSE1():
    T = 100
    p = 10

    ar_dyn = np.array([0.6, -0.5, 0.4, -0.4, 0.3])
    ma_dyn = np.array([0.3, -0.2])
    mean, noise_magnitude = 0, 0.3
    hp1 = np.array([10, 1, 0.1, 0.01, 0.001, 0.0001])
    hp2 = np.array([10, 1, 0.1, 0.01, 0.001, 0.0001])

    print("Setting 1 SE started at " + str(datetime.datetime.now()),
          flush=True)
    exp = Experiment()
    exp.initialize(timesteps=T, n_runs=5)
    exp.add_problem('ARMA-v0', {
        'p': ar_dyn,
        'q': ma_dyn,
        'c': mean,
        'noise_magnitude': noise_magnitude
    },
                    name='I')

    val = [8, 16, 32, 64]
    for p in val:
        print("setting 1 SE p = " + str(p) + " started.", flush=True)
        for lr in hp1:
            param = {'lr': lr}
            exp.add_method('RealAR', {
                'p': p,
                'optimizer': RealOGD(hyperparameters=param)
            },
                           name='OGD_{0}'.format(lr))

        for eta in hp1:
            for eps in hp2:
                param = {'eps': eps, 'eta': eta}
                exp.add_method('RealAR', {
                    'p': p,
                    'optimizer': RealONS(hyperparameters=param)
                },
                               name='ONS_{0}_{1}'.format(eta, eps))

    print("Setting 1 SE tuned at " + str(datetime.datetime.now()), flush=True)
    exp.scoreboard(n_digits=10)