Sql 根据机器时间自动调整参数
我正在寻找一种机器学习算法,它根据预定义的标准动态调整参数: 假设我有以下数据:Sql 根据机器时间自动调整参数,sql,oracle,machine-learning,plsql,Sql,Oracle,Machine Learning,Plsql,我正在寻找一种机器学习算法,它根据预定义的标准动态调整参数: 假设我有以下数据: Iteration Batch_Size Elapsed Time 1 1000 10 2 1000 11 3 1000 10 我的标准是:如果最近迭代的平均运行时间小于60秒,则将大小加倍 由于最近3次迭代的平均运行时间小于60秒,因此批大小可
Iteration Batch_Size Elapsed Time
1 1000 10
2 1000 11
3 1000 10
我的标准是:如果最近迭代的平均运行时间小于60秒,则将大小加倍
由于最近3次迭代的平均运行时间小于60秒,因此批大小可以增加到2000。接下来的3次迭代可能如下所示
4 2000 20
5 2000 31
6 2000 30
120 32000 121
121 32000 93
122 32000 113
123 16000 51
124 16000 54
125 16000 61
我们继续这一进程。如果经过的时间超过了60秒,那么我们返回到前面的值,如下所示
4 2000 20
5 2000 31
6 2000 30
120 32000 121
121 32000 93
122 32000 113
123 16000 51
124 16000 54
125 16000 61
是否有可用的PL/SQL或SQL库
谢谢
oradbanj我试图通过根据之前的已用时间值改变一个随机数来模拟您的已用时间。然后我使用一个窗口函数avg来计算当前和前2个经过时间的平均经过时间。调整后的批次大小反映了变化的平均运行时间。因为它使用的是随机数,所以每次都会生成不同的结果集。试着运行几次,看看是否达到预期效果
WITH
build_data (iteration, batch_size, elapsed_time)
AS
(SELECT 1 iteration, 1000 AS batch_size, TRUNC (DBMS_RANDOM.VALUE (25, 120)) elapsed_time
FROM DUAL
UNION ALL
SELECT iteration + 1
, batch_size
, CASE
WHEN elapsed_time > 60
THEN
TRUNC (DBMS_RANDOM.VALUE (25, 70))
ELSE
TRUNC (DBMS_RANDOM.VALUE (25, 120))
END
FROM build_data
WHERE iteration < 1000),
calc_data
AS
(SELECT iteration
, batch_size
, elapsed_time
, ROUND (
AVG (elapsed_time)
OVER (
ORDER BY iteration ROWS 2 PRECEDING
)
)
average_elapsed_time
FROM build_data)
SELECT a.iteration
-- , batch_size
, elapsed_time
, average_elapsed_time
, GREATEST (
batch_size
+ (CASE WHEN average_elapsed_time < 60 THEN 1 WHEN average_elapsed_time > 60 THEN -1 ELSE 0 END * 1000)
, 1000
)
adjusted_batch_size
FROM calc_data a
ORDER BY iteration;
你能解释一下最近有多少次手术吗?2、3、5、10或10000?3次手术可以认为是最近的。太好了。作品广告预期。