Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 根据机器时间自动调整参数_Sql_Oracle_Machine Learning_Plsql - Fatal编程技术网

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次手术可以认为是最近的。太好了。作品广告预期。