Code Monkey home page Code Monkey logo

jena-rl's Introduction

概述

本项目使用了强化学习算法来优化SPARQL查询,使用的图数据库是Apache Jena(TDB),版本是3.14.0。本项目旨在优化基本图模式(BGP)中三元组模式的连接顺序。

如何配置项目

  1. clone此项目到本地,安装好maven工具

  2. 使用maven工具安装依赖

    mvn -Drat.skip=true install
    
  3. 下载LUBM数据集,将数据集放到项目的Data目录下 在生成lubm-uba项目时,建议选择生成命令:

    ./generate.sh --quiet --timing -u 1000 --format NTRIPLES --consolidate Partial --threads 8

    这样生成的.nt数据是分散在1000个小文件中的,方便择取部分数据导入数据库

  4. 尝试使用maven编译,查看是否有错误,如果没有错误就配置完成

    mvn -Drat.skip=true compile

如何使用

  1. 将代码StarterTDB.java中的
    loadData(model, "./Data/LUBM/", "N-TRIPLE");
    取消注释,将"./Data/LUBM/"替换为导入数据的文件夹名称。 注意:只需要导入数据的代码只需要执行一次,数据已经存入了数据库,之后再运行代码无需导入数据。
  2. 在终端运行

    ./run.sh

如何训练

优化器选择

在StarterTDB.java中有如下的优化器名称:

String Optimizer = "Default";
String Optimizer = "QLearning";
String Optimizer = "DQN";

"Default"表示Jena自带的优化器 "QLearning"表示基于强化学习中的QLearning算法实现的优化器 "DQN"表示基于强化学习中的DQN算法实现的优化器 要使用哪个优化器,就将其他两个优化器的代码行注释掉

用于训练的代码

在StarterTDB.java中有

RLTrain(QLearning, trainQueryList, 200);

的代码,用于批量训练模型,200表示训练的轮数,trainQueryList代表用于训练的查询集,运行这个函数就可以训练模型了。

如果想单次执行一个查询,可以运行以下代码:

singleRun(QLearning, query);

query是Jena的Query对象

如果想单次运行一个查询集,可以运行以下代码:

runQuerySet(QLearning, trainQueryList);

trainQueryList代表用于执行的查询集,是一个List<Query>对象

代码介绍

StarterTDB.java: 是主函数所在的类,负责连接数据库,导入数据,执行查询,展示查询结果,还包含一些读写文件的工具函数。

OpExecutorTDB1.java: 位于./src/main/java/org/apache/jena/tdb/solver文件夹中,代码中的第177行有函数:

private static QueryIterator optimizeExecuteTriples(DatasetGraphTDB dsgtdb, QueryIterator input,
            BasicPattern pattern, ExprList exprs, ExecutionContext execCxt)

这个函数是Jena用于BGP优化的函数,在其中可以添加自己的优化函数

QLearning.java: 位于./src/main/java/org/apache/jena/tdb/solver文件夹中 是Q学习的优化器

DQN Package: 这个包位于./src/main/java/org/apache/jena/tdb/solver中,主要负责DQN算法。 DQN.java: 包含了算法的各种参数和接收Jena传入的查询,负责查询的编码

BgpMDP.java: 用于定义MDP的五个要素,包括初始状态,状态,状态的转移,奖励

BgpActionSpace.java 用于定义动作空间,包括动作的数据结构和动作的选择方式

BgpMDPPolicy.java 用于在根据已有的策略来进行优化时的MDP情况

BgpLearning.java 负责单步的训练过程

BgpPolicy.java 负责根据已有的网络来决定下一步的最优动作

优化效果

数据集1的运行效果: 训练查询集:

Query1 Query2 Query3 Query4 Query5 Query6 Query7 Query8 求和
Jena优化器 649 3 2 1 20 1 19019 1 19047
Q学习 179 12 7 1 9 2 10946 2 11158
DQN 6313 9 1 1 2 1 2611 1 8939

训练集图示

测试查询集:

Query1 Query2 Query3 Query4 Query5 Query6 求和
Jena优化器 150 1072 1 9 94 5 1331
Q学习 232 668 2 1 3 1 907
DQN 214 544 1 2 2 1 764

测试集图示

数据集2的运行效果: 训练查询集:

Query1 Query2 Query3 Query4 Query5 Query6 Query7 Query8 求和
Jena优化器 383 3 3 1 16 2 539 2 949
Q学习 830 6 1 2 2 2 123 2 968
DQN 186 20 3 2 2 3 291 2 507

训练集图示

测试查询集:

Query1 Query2 Query3 Query4 Query5 Query6 求和
Jena优化器 154 190 27 12 83 8 474
Q学习 217 184 3 13 1 2 420
DQN 202 147 1 21 2 2 375

测试集图示

数据运行结果截图: 数据集1: 训练查询集:

  1. Jena优化器:
  2. Q学习:
  3. DQN 测试查询集:
  4. Jena优化器:
  5. Q学习:
  6. DQN

数据集2: 训练查询集:

  1. Jena优化器:
  2. Q学习:
  3. DQN 测试查询集:
  4. Jena优化器:
  5. Q学习:
  6. DQN

jena-rl's People

Contributors

dependabot[bot] avatar yunfeng0817 avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

Forkers

gsanou

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.