autodl-projects/xautodl/datasets/synthetic_core.py

100 lines
3.8 KiB
Python
Raw Normal View History

2021-05-24 07:06:10 +02:00
import math
2021-05-09 12:53:18 +02:00
from .synthetic_utils import TimeStamp
2021-04-28 17:56:25 +02:00
from .synthetic_env import SyntheticDEnv
2021-05-27 09:44:01 +02:00
from .math_core import LinearSFunc
from .math_core import LinearDFunc
2021-05-27 11:30:44 +02:00
from .math_core import QuadraticDFunc, SinQuadraticDFunc, BinaryQuadraticDFunc
2021-05-26 10:53:44 +02:00
from .math_core import (
ConstantFunc,
2021-05-27 09:44:01 +02:00
ComposedSinSFunc as SinFunc,
ComposedCosSFunc as CosFunc,
2021-05-26 10:53:44 +02:00
)
2021-05-27 11:30:44 +02:00
from .math_core import UniformDGenerator, GaussianDGenerator
2021-04-28 17:56:25 +02:00
2021-05-09 12:53:18 +02:00
__all__ = ["TimeStamp", "SyntheticDEnv", "get_synthetic_env"]
2021-05-26 03:17:38 +02:00
def get_synthetic_env(total_timestamp=1600, num_per_task=1000, mode=None, version="v1"):
max_time = math.pi * 10
2021-05-27 09:44:01 +02:00
if version.lower() == "v1":
2021-05-24 14:55:14 +02:00
mean_generator = ConstantFunc(0)
std_generator = ConstantFunc(1)
data_generator = GaussianDGenerator(
2021-05-27 10:09:28 +02:00
[mean_generator], [[std_generator]], (-3, 3)
2021-05-24 14:55:14 +02:00
)
time_generator = TimeStamp(
2021-05-26 03:17:38 +02:00
min_timestamp=0, max_timestamp=max_time, num=total_timestamp, mode=mode
2021-05-24 14:55:14 +02:00
)
2021-05-27 09:44:01 +02:00
oracle_map = LinearDFunc(
2021-05-24 14:55:14 +02:00
params={
2021-05-26 03:17:38 +02:00
0: SinFunc(params={0: 2.0, 1: 1.0, 2: 2.2}), # 2 sin(t) + 2.2
1: SinFunc(params={0: 1.5, 1: 0.6, 2: 1.8}), # 1.5 sin(0.6t) + 1.8
2021-05-24 14:55:14 +02:00
}
)
dynamic_env = SyntheticDEnv(
2021-05-27 09:56:08 +02:00
data_generator, oracle_map, time_generator, num_per_task, noise=0.1
2021-05-24 14:55:14 +02:00
)
2021-05-27 09:44:01 +02:00
dynamic_env.set_regression()
elif version.lower() == "v2":
2021-05-09 12:53:18 +02:00
mean_generator = ConstantFunc(0)
std_generator = ConstantFunc(1)
2021-05-24 07:06:10 +02:00
data_generator = GaussianDGenerator(
2021-05-27 10:09:28 +02:00
[mean_generator], [[std_generator]], (-3, 3)
2021-05-09 12:53:18 +02:00
)
2021-05-24 07:06:10 +02:00
time_generator = TimeStamp(
2021-05-26 03:17:38 +02:00
min_timestamp=0, max_timestamp=max_time, num=total_timestamp, mode=mode
2021-05-09 12:53:18 +02:00
)
2021-05-27 09:44:01 +02:00
oracle_map = QuadraticDFunc(
2021-05-24 07:06:10 +02:00
params={
2021-05-27 09:44:01 +02:00
0: LinearSFunc(params={0: 0.1, 1: 0}), # 0.1 * t
1: ConstantFunc(0),
2: CosFunc(params={0: 4.0, 1: 10, 2: 0}), # 4 * cos(10 * t)
2021-05-24 07:06:10 +02:00
}
)
dynamic_env = SyntheticDEnv(
2021-05-27 09:56:08 +02:00
data_generator, oracle_map, time_generator, num_per_task, noise=0.1
2021-05-09 13:05:07 +02:00
)
2021-05-27 09:44:01 +02:00
dynamic_env.set_regression()
2021-05-26 10:53:44 +02:00
elif version.lower() == "v3":
mean_generator = SinFunc(params={0: 1, 1: 1, 2: 0}) # sin(t)
std_generator = CosFunc(params={0: 0.5, 1: 1, 2: 1}) # 0.5 cos(t) + 1
data_generator = GaussianDGenerator(
2021-05-27 10:09:28 +02:00
[mean_generator], [[std_generator]], (-3, 3)
2021-05-26 10:53:44 +02:00
)
time_generator = TimeStamp(
min_timestamp=0, max_timestamp=max_time, num=total_timestamp, mode=mode
)
2021-05-27 09:44:01 +02:00
oracle_map = SinQuadraticDFunc(
2021-05-26 10:53:44 +02:00
params={
2021-05-27 05:17:57 +02:00
0: CosFunc(params={0: 0.5, 1: 1, 2: 1}), # 0.5 cos(t) + 1
2021-05-26 10:53:44 +02:00
1: SinFunc(params={0: 1, 1: 1, 2: 0}), # sin(t)
2: ConstantFunc(0),
}
)
dynamic_env = SyntheticDEnv(
2021-05-27 09:56:08 +02:00
data_generator, oracle_map, time_generator, num_per_task, noise=0.05
2021-05-26 10:53:44 +02:00
)
2021-05-27 09:44:01 +02:00
dynamic_env.set_regression()
elif version.lower() == "v4":
2021-05-27 11:30:44 +02:00
l_generator = ConstantFunc(-2)
r_generator = ConstantFunc(2)
data_generator = UniformDGenerator([l_generator] * 2, [r_generator] * 2)
time_generator = TimeStamp(
min_timestamp=0, max_timestamp=max_time, num=total_timestamp, mode=mode
)
oracle_map = BinaryQuadraticDFunc(
params={
0: SinFunc(params={0: 1, 1: 3, 2: 0}), # sin(3 * t)
1: CosFunc(params={0: 1, 1: 6, 2: 0}), # cos(6 * t)
2: ConstantFunc(0),
}
)
2021-05-27 10:09:28 +02:00
dynamic_env = SyntheticDEnv(
2021-05-27 11:30:44 +02:00
data_generator, oracle_map, time_generator, num_per_task, noise=None
2021-05-27 10:09:28 +02:00
)
2021-05-27 09:44:01 +02:00
dynamic_env.set_classification(2)
2021-05-09 12:53:18 +02:00
else:
raise ValueError("Unknown version: {:}".format(version))
2021-04-28 17:56:25 +02:00
return dynamic_env