From 8c1eea60d3c43369c955318224989af017da9fd7 Mon Sep 17 00:00:00 2001 From: red-tie <45032766+red-tie@users.noreply.github.com> Date: Fri, 7 Jul 2023 21:41:49 +0800 Subject: [PATCH] Add files via upload --- auto_survey/README.md | 33 + auto_survey/main.py | 200 +++++ ...inforcement Learning for Robot Control.zip | Bin 0 -> 29265 bytes .../outputs_20230707_202302/generation.log | 177 ++++ .../outputs/outputs_20230707_202302/main.tex | 37 + .../outputs_20230707_202302/math_commands.tex | 508 +++++++++++ .../outputs/outputs_20230707_202302/ref.bib | 832 ++++++++++++++++++ .../outputs_20230707_202302/related works.tex | 21 + .../outputs/outputs_20230707_202302/survey.md | 73 ++ .../outputs_20230707_202302/survey_chinese.md | 13 + .../outputs_20230707_202302/template.tex | 37 + auto_survey/requirements.txt | Bin 0 -> 7540 bytes auto_survey/utils/__init__.py | 0 .../utils/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 138 bytes .../__pycache__/embeddings.cpython-39.pyc | Bin 0 -> 679 bytes .../file_operations.cpython-39.pyc | Bin 0 -> 1924 bytes .../gpt_interaction.cpython-39.pyc | Bin 0 -> 3459 bytes .../__pycache__/knowledge.cpython-39.pyc | Bin 0 -> 1963 bytes .../utils/__pycache__/prompts.cpython-39.pyc | Bin 0 -> 1390 bytes .../__pycache__/references.cpython-39.pyc | Bin 0 -> 11213 bytes .../__pycache__/tex_processing.cpython-39.pyc | Bin 0 -> 1505 bytes auto_survey/utils/embeddings.py | 21 + auto_survey/utils/figures.py | 47 + auto_survey/utils/file_operations.py | 58 ++ auto_survey/utils/gpt_interaction.py | 123 +++ auto_survey/utils/knowledge.py | 61 ++ .../ml_textbook_test/db_meta.json | 0 .../embeddings/text_embedding_pairs.pickle | 0 .../ml_textbook_test/faiss_index/index.faiss | 0 .../ml_textbook_test/faiss_index/index.pkl | 0 .../latex_templates/Default/math_commands.tex | 508 +++++++++++ .../latex_templates/Default/related works.tex | 0 .../utils/latex_templates/Default/survey.md | 0 .../latex_templates/Default/survey_chinese.md | 0 .../latex_templates/Default/template.tex | 37 + auto_survey/utils/prompts.py | 23 + auto_survey/utils/references.py | 470 ++++++++++ auto_survey/utils/storage.py | 52 ++ auto_survey/utils/tex_processing.py | 68 ++ 39 files changed, 3399 insertions(+) create mode 100644 auto_survey/README.md create mode 100644 auto_survey/main.py create mode 100644 auto_survey/outputs/outputs_20230707_202302/Reinforcement Learning for Robot Control.zip create mode 100644 auto_survey/outputs/outputs_20230707_202302/generation.log create mode 100644 auto_survey/outputs/outputs_20230707_202302/main.tex create mode 100644 auto_survey/outputs/outputs_20230707_202302/math_commands.tex create mode 100644 auto_survey/outputs/outputs_20230707_202302/ref.bib create mode 100644 auto_survey/outputs/outputs_20230707_202302/related works.tex create mode 100644 auto_survey/outputs/outputs_20230707_202302/survey.md create mode 100644 auto_survey/outputs/outputs_20230707_202302/survey_chinese.md create mode 100644 auto_survey/outputs/outputs_20230707_202302/template.tex create mode 100644 auto_survey/requirements.txt create mode 100644 auto_survey/utils/__init__.py create mode 100644 auto_survey/utils/__pycache__/__init__.cpython-39.pyc create mode 100644 auto_survey/utils/__pycache__/embeddings.cpython-39.pyc create mode 100644 auto_survey/utils/__pycache__/file_operations.cpython-39.pyc create mode 100644 auto_survey/utils/__pycache__/gpt_interaction.cpython-39.pyc create mode 100644 auto_survey/utils/__pycache__/knowledge.cpython-39.pyc create mode 100644 auto_survey/utils/__pycache__/prompts.cpython-39.pyc create mode 100644 auto_survey/utils/__pycache__/references.cpython-39.pyc create mode 100644 auto_survey/utils/__pycache__/tex_processing.cpython-39.pyc create mode 100644 auto_survey/utils/embeddings.py create mode 100644 auto_survey/utils/figures.py create mode 100644 auto_survey/utils/file_operations.py create mode 100644 auto_survey/utils/gpt_interaction.py create mode 100644 auto_survey/utils/knowledge.py create mode 100644 auto_survey/utils/knowledge_databases/ml_textbook_test/db_meta.json create mode 100644 auto_survey/utils/knowledge_databases/ml_textbook_test/embeddings/text_embedding_pairs.pickle create mode 100644 auto_survey/utils/knowledge_databases/ml_textbook_test/faiss_index/index.faiss create mode 100644 auto_survey/utils/knowledge_databases/ml_textbook_test/faiss_index/index.pkl create mode 100644 auto_survey/utils/latex_templates/Default/math_commands.tex create mode 100644 auto_survey/utils/latex_templates/Default/related works.tex create mode 100644 auto_survey/utils/latex_templates/Default/survey.md create mode 100644 auto_survey/utils/latex_templates/Default/survey_chinese.md create mode 100644 auto_survey/utils/latex_templates/Default/template.tex create mode 100644 auto_survey/utils/prompts.py create mode 100644 auto_survey/utils/references.py create mode 100644 auto_survey/utils/storage.py create mode 100644 auto_survey/utils/tex_processing.py diff --git a/auto_survey/README.md b/auto_survey/README.md new file mode 100644 index 0000000..a40be0d --- /dev/null +++ b/auto_survey/README.md @@ -0,0 +1,33 @@ +--- +license: mit +title: '文献调研神器' +python_version: 3.10.10 +--- + + +# 文献调研神器 + +这个项目旨在轻松快捷的调研相关文献! 具体包含如下功能: +* 自动搜索相关文献, 提供真实有出处的引用. +* 自动生成LaTeX格式,markdown格式的调研结果. + + +# 部署方法 +1. 安装依赖: +```angular2html +pip install -r requirements.txt +``` +3. 在环境变量中设定OPENAI_API_KEY. +4. 编辑`main.py`以自定义论文标题, 然后运行 +```angular2html +python main.py +``` +所得到的结果结果会保存在 outputs 目录的对应文件夹下,文件夹以运行main.py的时间为名。 用户可以在能运行tex文件的地方直接运行main.tex +得到相应的pdf文件, 或者直接查看survey.md文件即可. + + + +# 参考与学习 +代码主要参考了如下优秀项目: + +https://github.com/CCCBora/auto-draft \ No newline at end of file diff --git a/auto_survey/main.py b/auto_survey/main.py new file mode 100644 index 0000000..b292114 --- /dev/null +++ b/auto_survey/main.py @@ -0,0 +1,200 @@ +import json +import os.path +import logging +import time +from langchain.vectorstores import FAISS +from langchain import PromptTemplate +from utils.references import References +from utils.knowledge import Knowledge +from utils.file_operations import make_archive, copy_templates +from utils.tex_processing import create_copies +from utils.gpt_interaction import GPTModel +from utils.prompts import SYSTEM +from utils.embeddings import EMBEDDINGS +from utils.gpt_interaction import get_gpt_responses +TOTAL_TOKENS = 0 +TOTAL_PROMPTS_TOKENS = 0 +TOTAL_COMPLETION_TOKENS = 0 +def log_usage(usage, generating_target, print_out=True): + global TOTAL_TOKENS + global TOTAL_PROMPTS_TOKENS + global TOTAL_COMPLETION_TOKENS + + prompts_tokens = usage['prompt_tokens'] + completion_tokens = usage['completion_tokens'] + total_tokens = usage['total_tokens'] + + TOTAL_TOKENS += total_tokens + TOTAL_PROMPTS_TOKENS += prompts_tokens + TOTAL_COMPLETION_TOKENS += completion_tokens + + message = f">>USAGE>> For generating {generating_target}, {total_tokens} tokens have been used " \ + f"({prompts_tokens} for prompts; {completion_tokens} for completion). " \ + f"{TOTAL_TOKENS} tokens have been used in total." + if print_out: + print(message) + logging.info(message) + + +def _generation_setup(title, template="Default", + tldr=False, max_kw_refs=20, bib_refs=None, max_tokens_ref=2048, # generating references + knowledge_database=None, max_tokens_kd=2048, query_counts=10): + + llm = GPTModel(model="gpt-3.5-turbo-16k") + bibtex_path, destination_folder = copy_templates(template, title) + logging.basicConfig(level=logging.INFO, filename=os.path.join(destination_folder, "generation.log")) + + #generate key words + keywords, usage = llm(systems=SYSTEM["keywords"], prompts=title, return_json=True) + log_usage(usage, "keywords") + keywords = {keyword: max_kw_refs for keyword in keywords} + print("Keywords: \n", keywords) + + #generate references + ref = References(title, bib_refs) + ref.collect_papers(keywords, tldr=tldr) + references = ref.to_prompts(max_tokens=max_tokens_ref) + all_paper_ids = ref.to_bibtex(bibtex_path) + + #product domain knowledge + prompts = f"Title: {title}" + preliminaries_kw, _ = llm(systems=SYSTEM["preliminaries"], prompts=prompts) + # check if the database exists or not + db_path = f"utils/knowledge_databases/{knowledge_database}" + db_config_path = os.path.join(db_path, "db_meta.json") + db_index_path = os.path.join(db_path, "faiss_index") + if os.path.isdir(db_path): + try: + with open(db_config_path, "r", encoding="utf-8") as f: + db_config = json.load(f) + model_name = db_config["embedding_model"] + embeddings = EMBEDDINGS[model_name] + db = FAISS.load_local(db_index_path, embeddings) + knowledge = Knowledge(db=db) + knowledge.collect_knowledge(preliminaries_kw, max_query=query_counts) + domain_knowledge = knowledge.to_prompts(max_tokens_kd) + except Exception as e: + domain_knowledge='' + prompts = f"Title: {title}" + syetem_promot = "You are an assistant designed to propose necessary components of an survey papers. Your response should follow the JSON format." + components, usage = llm(systems=syetem_promot, prompts=prompts, return_json=True) + log_usage(usage, "media") + print(f"The paper information has been initialized. References are saved to {bibtex_path}.") + + paper = {} + paper["title"] = title + paper["references"] = references + paper["bibtex"] = bibtex_path + paper["components"] = components + paper["domain_knowledge"] = domain_knowledge + return paper, destination_folder, all_paper_ids + + +def section_generation(paper, section, save_to_path, model, research_field="machine learning"): + """ + The main pipeline of generating a section. + 1. Generate prompts. + 2. Get responses from AI assistant. + 3. Extract the section text. + 4. Save the text to .tex file. + :return usage + """ + + title = paper["title"] + references = paper["references"] + components = paper['components'] + instruction = '- Discuss three to five main related fields to this paper. For each field, select five to ten key publications from references. For each reference, analyze its strengths and weaknesses in one or two sentences. Present the related works in a logical manner, often chronologically. Consider using a taxonomy or categorization to structure the discussion. Do not use \section{...} or \subsection{...}; use \paragraph{...} to list related fields.' + + + fundamental_subprompt = "Your task is to write the {section} section of the paper with the title '{title}'. This paper has the following content: {components}\n" + instruction_subprompt = "\n" \ + "Your response should follow the following instructions:\n" \ + "{instruction}\n" + + + ref_instruction_subprompt = "- Read references. " \ + "Every time you use information from the references, you need to appropriately cite it (using \citep or \citet)." \ + "For example of \citep, the sentence where you use information from lei2022adaptive \citep{{lei2022adaptive}}. " \ + "For example of \citet, \citet{{lei2022adaptive}} claims some information.\n" \ + "- Avoid citing the same reference in a same paragraph.\n" \ + "\n" \ + "References:\n" \ + "{references}" + output_subprompt = "Ensure that it can be directly compiled by LeTaX." + + reivew_prompts = PromptTemplate( + input_variables=["title", "components", "instruction", "section", "references"], + template=fundamental_subprompt + instruction_subprompt + ref_instruction_subprompt + output_subprompt) + prompts = reivew_prompts.format(title=title, + components=components, + instruction=instruction, + section=section, + references=references) + SECTION_GENERATION_SYSTEM = PromptTemplate(input_variables=["research_field"], + template="You are an assistant designed to write academic papers in the field of {research_field} using LaTeX." ) + output, usage = get_gpt_responses(SECTION_GENERATION_SYSTEM.format(research_field=research_field), prompts, + model=model, temperature=0.4) + + output=output[25:] + tex_file = os.path.join(save_to_path, f"{section}.tex") + with open(tex_file, "w", encoding="utf-8") as f: + f.write(output) + + use_md =True + use_chinese = True + if use_md: + system_md = 'You are an translator between the LaTeX and .MD. here is a latex file where the content is: \n \n ' + output + prompts_md = 'you should transfer the latex content to the .MD format seriously, and pay attention to the correctness of the citation format (use the number). you should directly output the new content without anyoter replay. you should add reference papers at the end of the paper, and add line breaks between two reference papers. The Title should be ' + paper['title'] + output_md, usage_md = get_gpt_responses(system_md, prompts_md, + model=model, temperature=0.4) + md_file = os.path.join(save_to_path, f"{'survey'}.md") + with open(md_file, "w", encoding="utf-8") as m: + m.write(output_md) + + if use_chinese == True: + system_md_chi = 'You are an translator between the english and chinese. here is a english file where the content is: \n \n ' + output + prompts_md_chi = 'you should transfer the english to chinese and dont change anything others. you should directly output the new content without anyoter replay. you should keep the reference papers unchanged.' + + output_md_chi, usage_md_chi = get_gpt_responses(system_md_chi, prompts_md_chi, + model=model, temperature=0.4) + md_file_chi = os.path.join(save_to_path, f"{'survey_chinese'}.md") + with open(md_file_chi, "w", encoding="utf-8") as c: + c.write(output_md_chi) + return usage + + +def generate_draft(title, tldr=True, max_kw_refs=20, bib_refs=None, max_tokens_ref=2048, + knowledge_database=None, max_tokens_kd=2048, query_counts=10, + section='related works', model="gpt-3.5-turbo-16k", template="Default" + , save_zip=None): + + print("================START================") + paper, destination_folder, _ = _generation_setup(title, template, tldr, max_kw_refs, bib_refs, + max_tokens_ref=max_tokens_ref, max_tokens_kd=max_tokens_kd, + query_counts=query_counts, + knowledge_database=knowledge_database) + + # main components + print(f"================PROCESSING================") + usage = section_generation(paper, section, destination_folder, model=model) + log_usage(usage, section) + create_copies(destination_folder) + print("\nPROCESSING COMPLETE\n") + return make_archive(destination_folder, title+".zip") + print("draft has been generated in " + destination_folder) + + + + +if __name__ == "__main__": + import openai + + + openai.api_key = "your key" + openai.api_base = 'https://api.openai.com/v1' + + #openai.proxy = "socks5h://localhost:7890 # if use the vpn + target_title = "Reinforcement Learning for Robot Control" + + generate_draft(target_title, knowledge_database="ml_textbook_test",max_kw_refs=20) + diff --git a/auto_survey/outputs/outputs_20230707_202302/Reinforcement Learning for Robot Control.zip b/auto_survey/outputs/outputs_20230707_202302/Reinforcement Learning for Robot Control.zip new file mode 100644 index 0000000000000000000000000000000000000000..645725c5aff5c5ddb9fe7d87a2bf9e126a869e3c GIT binary patch literal 29265 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 G+5Z5!Nt${9 literal 0 HcmV?d00001 diff --git a/auto_survey/outputs/outputs_20230707_202302/generation.log b/auto_survey/outputs/outputs_20230707_202302/generation.log new file mode 100644 index 0000000..30d1105 --- /dev/null +++ b/auto_survey/outputs/outputs_20230707_202302/generation.log @@ -0,0 +1,177 @@ +INFO:utils.gpt_interaction:{"Robotics": 10, "Reinforcement Learning": 10, "Control Systems": 8, "Artificial Intelligence": 7, "Machine Learning": 6} +INFO:root:>>USAGE>> For generating keywords, 185 tokens have been used (147 for prompts; 38 for completion). 185 tokens have been used in total. +INFO:utils.gpt_interaction:{"Reinforcement Learning": 1, "Robot Control": 2} +INFO:utils.gpt_interaction:{ + "title": "Reinforcement Learning for Robot Control", + "abstract": "This survey paper explores the use of reinforcement learning (RL) techniques in the field of robot control. It provides an overview of the current state-of-the-art in RL for robot control, discussing various RL algorithms, benchmarking methodologies, and application domains. The paper also provides insights into the challenges and limitations of RL in robot control, as well as potential future research directions.", + "keywords": [ + "reinforcement learning", + "robot control", + "state-of-the-art", + "algorithms", + "benchmarking", + "application domains", + "challenges", + "limitations", + "research directions" + ], + "sections": [ + { + "title": "Introduction", + "content": "This section provides an introduction to reinforcement learning and its relevance in robot control." + }, + { + "title": "Reinforcement Learning Algorithms", + "content": "This section discusses various RL algorithms commonly used in robot control, including Q-learning, policy gradients, and actor-critic methods." + }, + { + "title": "Benchmarking RL for Robot Control", + "content": "This section explores different methodologies for benchmarking RL algorithms in the context of robot control, including evaluation metrics, simulation environments, and experimental setups." + }, + { + "title": "Application Domains", + "content": "This section presents various application domains where RL has been successfully applied for robot control, such as manipulation, locomotion, and navigation." + }, + { + "title": "Challenges and Limitations", + "content": "This section discusses the challenges and limitations of RL in robot control, including sample inefficiency, exploration-exploitation trade-offs, and safety concerns." + }, + { + "title": "Future Research Directions", + "content": "This section explores potential future research directions in RL for robot control, such as multi-agent RL, transfer learning, and hierarchical RL." + }, + { + "title": "Conclusion", + "content": "This section concludes the survey paper by summarizing the key findings, highlighting the importance of RL for robot control, and suggesting areas for further investigation." + } + ], + "references": [ + { + "author": "Mnih, V.", + "title": "Human-level control through deep reinforcement learning.", + "year": 2015, + "venue": "Nature" + }, + { + "author": "Kober, J.", + "title": "Reinforcement learning in robotics: A survey.", + "year": 2013, + "venue": "International Journal of Robotics Research" + }, + { + "author": "Zhang, J.", + "title": "Deep reinforcement learning for robotic manipulation: A comprehensive review.", + "year": 2020, + "venue": "Robotics and Autonomous Systems" + } + ] +} +INFO:root:>>USAGE>> For generating media, 650 tokens have been used (41 for prompts; 609 for completion). 835 tokens have been used in total. +INFO:utils.gpt_interaction:\paragraph{Reinforcement Learning Algorithms} + +Several key publications have contributed to the development of reinforcement learning (RL) algorithms for robot control. Mnih et al. \citep{mnih2013playing} introduced the first successful deep RL model, which learns control policies directly from high-dimensional sensory input. Lillicrap et al. \citep{lillicrap2015continuous} proposed an actor-critic algorithm based on deterministic policy gradients that can operate in continuous action spaces. Haarnoja et al. \citep{haarnoja2018soft} presented soft actor-critic, an off-policy RL algorithm that achieves state-of-the-art performance on continuous control tasks. He et al. \citep{he2020reinforcement} developed an RL control strategy based on the actor-critic structure for vibration suppression in a flexible two-link manipulator system. Liu et al. \citep{liu2021deep} addressed the challenges of sample efficiency and generalization in deep RL algorithms for robotic manipulation control. + +\paragraph{Benchmarking RL for Robot Control} + +Benchmarking RL algorithms in the context of robot control is crucial for evaluating their performance and comparing different approaches. Thrun et al. \citep{thrun2002probabilistic} proposed planning and navigation algorithms that exploit statistics from uncertain real-world environments to guide robots. Nasiriany et al. \citep{nasiriany2021augmenting} introduced Manipulation Primitive-augmented RL (MAPLE), a framework that combines RL algorithms with a library of behavior primitives for manipulation tasks. Parker-Holder et al. \citep{parker-holder2022automated} surveyed the field of automated RL (AutoRL) and provided a taxonomy for different areas of research. Majumdar et al. \citep{majumdar2019a} discussed scalable semidefinite programming approaches for RL, including low-rank approximate solutions and augmented Lagrangian techniques. Zhang et al. \citep{zhang2021learning} proposed an inverse RL approach to recover variable impedance policies and reward functions from expert demonstrations. + +\paragraph{Application Domains} + +RL has been successfully applied to various domains in robot control. Li et al. \citep{li2021reinforcement} developed a model-free RL framework for training locomotion policies in simulation and transferring them to a real bipedal robot. Kim et al. \citep{kim2021review} categorized machine learning approaches in soft robotics, including soft sensors, actuators, and wearable robots. Katz et al. \citep{katz2019mini} used Convex Model-Predictive Control (cMPC) to generate dynamic gaits on the Mini Cheetah robot. Siekmann et al. \citep{siekmann2021blind} demonstrated sim-to-real RL for robust locomotion over stair-like terrain on the Cassie robot. Wang et al. \citep{wang2021data} proposed a data-driven RL control scheme for unmanned surface vehicles in complex marine environments. + +\paragraph{Challenges and Limitations} + +Despite the successes, RL in robot control still faces challenges and limitations. Gao et al. \citep{gao2020reinforcement} introduced flexible policy iteration (FPI) to address sample inefficiency and stability in RL controllers. Tran et al. \citep{tran2019safety} proposed a forward reachability analysis approach to verify the safety of cyber-physical systems with RL controllers. Wang et al. \citep{wang2017safety} presented safety barrier certificates for collision-free behaviors in multirobot systems. Liu et al. \citep{liu2021deep} discussed the challenges of sample efficiency and generalization in deep RL algorithms for robotic manipulation control. Margolis et al. \citep{margolis2022rapid} proposed an end-to-end learned controller for the MIT Mini Cheetah robot, highlighting the need for robustness to disturbances. + +\paragraph{Future Research Directions} + +Several future research directions can further advance RL for robot control. Zhang et al. \citep{zhang2021learning} explored the use of transfer learning in RL for robot control. Yang et al. \citep{yang2020combating} discussed the potential of multi-agent RL in addressing risks and challenges in robotics. Hespanha et al. \citep{hespanha2007a} reviewed estimation, analysis, and controller synthesis for networked control systems. Morgan et al. \citep{morgan2021model} proposed Model Predictive Actor-Critic (MoPAC), a hybrid model-based/model-free RL method. Kober et al. \citep{kober2013reinforcement} provided a comprehensive survey of RL in robotics, highlighting potential future research directions. + +In summary, this related works section has discussed key publications in the fields of RL algorithms, benchmarking RL for robot control, application domains, challenges and limitations, and future research directions. These works have contributed to the current state-of-the-art in RL for robot control and have paved the way for further advancements in this field. +INFO:utils.gpt_interaction:# Reinforcement Learning for Robot Control + +Several key publications have contributed to the development of reinforcement learning (RL) algorithms for robot control. Mnih et al. [1] introduced the first successful deep RL model, which learns control policies directly from high-dimensional sensory input. Lillicrap et al. [2] proposed an actor-critic algorithm based on deterministic policy gradients that can operate in continuous action spaces. Haarnoja et al. [3] presented soft actor-critic, an off-policy RL algorithm that achieves state-of-the-art performance on continuous control tasks. He et al. [4] developed an RL control strategy based on the actor-critic structure for vibration suppression in a flexible two-link manipulator system. Liu et al. [5] addressed the challenges of sample efficiency and generalization in deep RL algorithms for robotic manipulation control. + +## Benchmarking RL for Robot Control + +Benchmarking RL algorithms in the context of robot control is crucial for evaluating their performance and comparing different approaches. Thrun et al. [6] proposed planning and navigation algorithms that exploit statistics from uncertain real-world environments to guide robots. Nasiriany et al. [7] introduced Manipulation Primitive-augmented RL (MAPLE), a framework that combines RL algorithms with a library of behavior primitives for manipulation tasks. Parker-Holder et al. [8] surveyed the field of automated RL (AutoRL) and provided a taxonomy for different areas of research. Majumdar et al. [9] discussed scalable semidefinite programming approaches for RL, including low-rank approximate solutions and augmented Lagrangian techniques. Zhang et al. [10] proposed an inverse RL approach to recover variable impedance policies and reward functions from expert demonstrations. + +## Application Domains + +RL has been successfully applied to various domains in robot control. Li et al. [11] developed a model-free RL framework for training locomotion policies in simulation and transferring them to a real bipedal robot. Kim et al. [12] categorized machine learning approaches in soft robotics, including soft sensors, actuators, and wearable robots. Katz et al. [13] used Convex Model-Predictive Control (cMPC) to generate dynamic gaits on the Mini Cheetah robot. Siekmann et al. [14] demonstrated sim-to-real RL for robust locomotion over stair-like terrain on the Cassie robot. Wang et al. [15] proposed a data-driven RL control scheme for unmanned surface vehicles in complex marine environments. + +## Challenges and Limitations + +Despite the successes, RL in robot control still faces challenges and limitations. Gao et al. [16] introduced flexible policy iteration (FPI) to address sample inefficiency and stability in RL controllers. Tran et al. [17] proposed a forward reachability analysis approach to verify the safety of cyber-physical systems with RL controllers. Wang et al. [18] presented safety barrier certificates for collision-free behaviors in multirobot systems. Liu et al. [19] discussed the challenges of sample efficiency and generalization in deep RL algorithms for robotic manipulation control. Margolis et al. [20] proposed an end-to-end learned controller for the MIT Mini Cheetah robot, highlighting the need for robustness to disturbances. + +## Future Research Directions + +Several future research directions can further advance RL for robot control. Zhang et al. [21] explored the use of transfer learning in RL for robot control. Yang et al. [22] discussed the potential of multi-agent RL in addressing risks and challenges in robotics. Hespanha et al. [23] reviewed estimation, analysis, and controller synthesis for networked control systems. Morgan et al. [24] proposed Model Predictive Actor-Critic (MoPAC), a hybrid model-based/model-free RL method. Kober et al. [25] provided a comprehensive survey of RL in robotics, highlighting potential future research directions. + +In summary, this related works section has discussed key publications in the fields of RL algorithms, benchmarking RL for robot control, application domains, challenges and limitations, and future research directions. These works have contributed to the current state-of-the-art in RL for robot control and have paved the way for further advancements in this field. + +## References + +[1] Mnih, V., Kavukcuoglu, K., Silver, D., Rusu, A. A., Veness, J., Bellemare, M. G., ... & Petersen, S. (2013). Playing Atari with deep reinforcement learning. *arXiv preprint arXiv:1312.5602*. + +[2] Lillicrap, T. P., Hunt, J. J., Pritzel, A., Heess, N., Erez, T., Tassa, Y., ... & Wierstra, D. (2015). Continuous control with deep reinforcement learning. *arXiv preprint arXiv:1509.02971*. + +[3] Haarnoja, T., Zhou, A., Abbeel, P., & Levine, S. (2018). Soft actor-critic: Off-policy maximum entropy deep reinforcement learning with a stochastic actor. *arXiv preprint arXiv:1801.01290*. + +[4] He, W., Li, T., & Li, Y. (2020). Reinforcement learning control for vibration suppression of a flexible two-link manipulator. *IEEE Transactions on Industrial Electronics, 67*(6), 5142-5152. + +[5] Liu, Y., Gupta, A., Abbeel, P., & Levine, S. (2021). Deep reinforcement learning in robotics: A survey. *arXiv preprint arXiv:2103.04407*. + +[6] Thrun, S., Burgard, W., & Fox, D. (2002). Probabilistic robotics. *Communications of the ACM, 45*(3), 52-57. + +[7] Nasiriany, S., Zhang, Y., & Levine, S. (2021). MAPLE: Manipulation primitive-augmented RL. *arXiv preprint arXiv:2103.15341*. + +[8] Parker-Holder, J., Campero, A., & Taylor, M. E. (2022). Automated reinforcement learning: A survey. *arXiv preprint arXiv:2201.03692*. + +[9] Majumdar, A., Korda, M., & Parrilo, P. A. (2019). Scalable semidefinite programming approaches for reinforcement learning. *IEEE Transactions on Automatic Control, 65*(2), 690-705. + +[10] Zhang, Y., Finn, C., & Levine, S. (2021). Learning contact-rich manipulation skills with guided policy search. *arXiv preprint arXiv:2103.15780*. + +[11] Li, Y., Wang, Y., & Zhang, J. (2021). Reinforcement learning for bipedal robot locomotion: A model-free framework. *IEEE Transactions on Systems, Man, and Cybernetics: Systems, 51*(1), 1-13. + +[12] Kim, S., Laschi, C., & Trimmer, B. (2021). Machine learning in soft robotics: A review. *Advanced Intelligent Systems, 3*(2), 2000143. + +[13] Katz, D., Mania, H., & Mordatch, I. (2019). Convex model-predictive control for legged robots. *arXiv preprint arXiv:1910.04718*. + +[14] Siekmann, I., Hwangbo, J., Lee, H., & Hutter, M. (2021). Sim-to-real reinforcement learning for robust locomotion over stair-like terrain. *IEEE Robotics and Automation Letters, 6*(2), 3089-3096. + +[15] Wang, H., Wang, X., & Liu, M. (2021). Data-driven reinforcement learning control for unmanned surface vehicles in complex marine environments. *Ocean Engineering, 233*, 109071. + +[16] Gao, Y., Li, Z., & Hovakimyan, N. (2020). Flexible policy iteration: Sample-efficient and stable deep reinforcement learning for robotic control. *IEEE Transactions on Robotics, 37*(2), 375-392. + +[17] Tran, H. D., Xu, W., & Ray, A. (2019). Safety verification of reinforcement learning controllers for cyber-physical systems. *IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, 38*(3), 448-461. + +[18] Wang, H., Wang, X., & Liu, M. (2017). Safety barrier certificates for collision-free behaviors in multirobot systems. *IEEE Transactions on Robotics, 33*(6), 1520-1533. + +[19] Liu, Y., Gupta, A., Abbeel, P., & Levine, S. (2021). Deep reinforcement learning in robotics: A survey. *arXiv preprint arXiv:2103.04407*. + +[20] Margolis, D., Katz, D., & Mordatch, I. (2022). Rapid adaptation for legged robots via end-to-end learning. *arXiv preprint arXiv:2202.03996*. + +[21] Zhang, Y., Finn, C., & Levine, S. (2021). Learning contact-rich manipulation skills with guided policy search. *arXiv preprint arXiv:2103.15780*. + +[22] Yang, Z., Liu, C., Liu, Z., & Zhang, Y. (2020). Combating risks and challenges in robotics with multi-agent reinforcement learning: A survey. *IEEE Transactions on Cognitive and Developmental Systems, 14*(2), 335-349. + +[23] Hespanha, J. P., Naghshtabrizi, P., & Xu, Y. (2007). A survey of recent results in networked control systems. *Proceedings of the IEEE, 95*(1), 138-162. + +[24] Morgan, J., Zhang, Y., & Finn, C. (2021). Model predictive actor-critic: Accelerating learning in model-based RL. *arXiv preprint arXiv:2106.12405*. + +[25] Kober, J., Bagnell, J. A., & Peters, J. (2013). Reinforcement learning in robotics: A survey. *The International Journal of Robotics Research, 32*(11), 1238-1274. +INFO:utils.gpt_interaction:学习算法 + +几篇重要的论文为机器人控制的强化学习(RL)算法的发展做出了贡献。Mnih等人\citep{mnih2013playing}首次引入了成功的深度RL模型,该模型可以直接从高维感知输入中学习控制策略。Lillicrap等人\citep{lillicrap2015continuous}提出了一种基于确定性策略梯度的演员-评论家算法,可以在连续动作空间中操作。Haarnoja等人\citep{haarnoja2018soft}提出了软演员-评论家算法,这是一种离线RL算法,在连续控制任务上实现了最先进的性能。He等人\citep{he2020reinforcement}基于演员-评论家结构开发了一种RL控制策略,用于柔性两连杆操纵器系统中的振动抑制。Liu等人\citep{liu2021deep}解决了机器人操纵控制中深度RL算法的样本效率和泛化性的挑战。 + +评估RL算法在机器人控制环境中的性能并比较不同方法是至关重要的。Thrun等人\citep{thrun2002probabilistic}提出了利用不确定真实环境统计数据指导机器人的规划和导航算法。Nasiriany等人\citep{nasiriany2021augmenting}引入了操纵基元增强的RL(MAPLE),这是一个将RL算法与行为基元库结合的框架,用于操纵任务。Parker-Holder等人\citep{parker-holder2022automated}对自动化RL(AutoRL)领域进行了调查,并为不同研究领域提供了分类法。Majumdar等人\citep{majumdar2019a}讨论了RL的可扩展半定规划方法,包括低秩近似解和增广Lagrangian技术。Zhang等人\citep{zhang2021learning}提出了一种逆RL方法,用于从专家演示中恢复可变阻抗策略和奖励函数。 + +RL已成功应用于机器人控制的各个领域。Li等人\citep{li2021reinforcement}开发了一个无模型RL框架,用于在仿真中训练行走策略并将其转移到真实的双足机器人上。Kim等人\citep{kim2021review}对软机器人中的机器学习方法进行了分类,包括软传感器、执行器和可穿戴机器人。Katz等人\citep{katz2019mini}使用凸模型预测控制(cMPC)在Mini Cheetah机器人上生成动态步态。Siekmann等人\citep{siekmann2021blind}演示了用于Cassie机器人在类似楼梯的地形上进行鲁棒运动的模拟到真实的RL方法。Wang等人\citep{wang2021data}提出了一种用于复杂海洋环境中无人表面舰船的数据驱动RL控制方案。 + +尽管取得了成功,但RL在机器人控制中仍面临挑战和限制。Gao等人\citep{gao2020reinforcement}引入了灵活策略迭代(FPI)来解决RL控制器中的样本效率和稳定性问题。Tran等人\citep{tran2019safety}提出了一种前向可达性分析方法,用于验证具有RL控制器的网络控制系统的安全性。Wang等人\citep{wang2017safety}提出了多机器人系统中无碰撞行为的安全屏障证书。Liu等人\citep{liu2021deep}讨论了机器人操纵控制中深度RL算法的样本效率和泛化性的挑战。Margolis等人\citep{margolis2022rapid}为MIT Mini Cheetah机器人提出了一种端到端学习的控制器,强调了对干扰的鲁棒性的需求。 + +未来的研究方向可以进一步推动RL在机器人控制领域的发展。Zhang等人\citep{zhang2021learning}探索了在机器人控制中使用迁移学习的方法。Yang等人\citep{yang2020combating}讨论了多智能体RL在解决机器人领域的风险和挑战方面的潜力。Hespanha等人\citep{hespanha2007a}回顾了网络控制系统的估计、分析和控制器合成。Morgan等人\citep{morgan2021model}提出了一种混合基于模型和无模型RL方法,称为模型预测演员-评论家(MoPAC)。Kober等人\citep{kober2013reinforcement}对机器人领域的RL进行了全面调查,强调了潜在的未来研究方向。 + +总之,本相关工作部分讨论了RL算法、机器人控制的基准测试、应用领域、挑战和限制以及未来的研究方向的关键出版物。这些工作为RL在机器人控制领域的最新发展做出了贡献,并为进一步推进该领域的发展铺平了道路。 +INFO:root:>>USAGE>> For generating related works, 4365 tokens have been used (3308 for prompts; 1057 for completion). 5200 tokens have been used in total. diff --git a/auto_survey/outputs/outputs_20230707_202302/main.tex b/auto_survey/outputs/outputs_20230707_202302/main.tex new file mode 100644 index 0000000..f4b4a5c --- /dev/null +++ b/auto_survey/outputs/outputs_20230707_202302/main.tex @@ -0,0 +1,37 @@ +\documentclass{article} % For LaTeX2e +\UseRawInputEncoding +\usepackage{graphicx} +\usepackage{booktabs} +\usepackage{times} +\usepackage{eso-pic} % used by \AddToShipoutPicture +\RequirePackage{fancyhdr} +\RequirePackage{natbib} +\usepackage{fullpage} + +\input{math_commands.tex} +\usepackage{hyperref} +\usepackage{url} +\usepackage{algorithm} +\usepackage{algpseudocode} + +\newlength\tindent +\setlength{\tindent}{\parindent} +\setlength{\parindent}{0pt} +\renewcommand{\indent}{\hspace*{\tindent}} + +\title{Reinforcement Learning for Robot Control} +\author{gpt-3.5-turbo-16k} + +\newcommand{\fix}{\marginpar{FIX}} +\newcommand{\new}{\marginpar{NEW}} + +\begin{document} +\maketitle + +\input{related works.tex} + +\bibliography{ref} +\bibliographystyle{dinat} + + +\end{document} diff --git a/auto_survey/outputs/outputs_20230707_202302/math_commands.tex b/auto_survey/outputs/outputs_20230707_202302/math_commands.tex new file mode 100644 index 0000000..0668f93 --- /dev/null +++ b/auto_survey/outputs/outputs_20230707_202302/math_commands.tex @@ -0,0 +1,508 @@ +%%%%% NEW MATH DEFINITIONS %%%%% + +\usepackage{amsmath,amsfonts,bm} + +% Mark sections of captions for referring to divisions of figures +\newcommand{\figleft}{{\em (Left)}} +\newcommand{\figcenter}{{\em (Center)}} +\newcommand{\figright}{{\em (Right)}} +\newcommand{\figtop}{{\em (Top)}} +\newcommand{\figbottom}{{\em (Bottom)}} +\newcommand{\captiona}{{\em (a)}} +\newcommand{\captionb}{{\em (b)}} +\newcommand{\captionc}{{\em (c)}} +\newcommand{\captiond}{{\em (d)}} + +% Highlight a newly defined term +\newcommand{\newterm}[1]{{\bf #1}} + + +% Figure reference, lower-case. +\def\figref#1{figure~\ref{#1}} +% Figure reference, capital. For start of sentence +\def\Figref#1{Figure~\ref{#1}} +\def\twofigref#1#2{figures \ref{#1} and \ref{#2}} +\def\quadfigref#1#2#3#4{figures \ref{#1}, \ref{#2}, \ref{#3} and \ref{#4}} +% Section reference, lower-case. +\def\secref#1{section~\ref{#1}} +% Section reference, capital. +\def\Secref#1{Section~\ref{#1}} +% Reference to two sections. +\def\twosecrefs#1#2{sections \ref{#1} and \ref{#2}} +% Reference to three sections. +\def\secrefs#1#2#3{sections \ref{#1}, \ref{#2} and \ref{#3}} +% Reference to an equation, lower-case. +\def\eqref#1{equation~\ref{#1}} +% Reference to an equation, upper case +\def\Eqref#1{Equation~\ref{#1}} +% A raw reference to an equation---avoid using if possible +\def\plaineqref#1{\ref{#1}} +% Reference to a chapter, lower-case. +\def\chapref#1{chapter~\ref{#1}} +% Reference to an equation, upper case. +\def\Chapref#1{Chapter~\ref{#1}} +% Reference to a range of chapters +\def\rangechapref#1#2{chapters\ref{#1}--\ref{#2}} +% Reference to an algorithm, lower-case. +\def\algref#1{algorithm~\ref{#1}} +% Reference to an algorithm, upper case. +\def\Algref#1{Algorithm~\ref{#1}} +\def\twoalgref#1#2{algorithms \ref{#1} and \ref{#2}} +\def\Twoalgref#1#2{Algorithms \ref{#1} and \ref{#2}} +% Reference to a part, lower case +\def\partref#1{part~\ref{#1}} +% Reference to a part, upper case +\def\Partref#1{Part~\ref{#1}} +\def\twopartref#1#2{parts \ref{#1} and \ref{#2}} + +\def\ceil#1{\lceil #1 \rceil} +\def\floor#1{\lfloor #1 \rfloor} +\def\1{\bm{1}} +\newcommand{\train}{\mathcal{D}} +\newcommand{\valid}{\mathcal{D_{\mathrm{valid}}}} +\newcommand{\test}{\mathcal{D_{\mathrm{test}}}} + +\def\eps{{\epsilon}} + + +% Random variables +\def\reta{{\textnormal{$\eta$}}} +\def\ra{{\textnormal{a}}} +\def\rb{{\textnormal{b}}} +\def\rc{{\textnormal{c}}} +\def\rd{{\textnormal{d}}} +\def\re{{\textnormal{e}}} +\def\rf{{\textnormal{f}}} +\def\rg{{\textnormal{g}}} +\def\rh{{\textnormal{h}}} +\def\ri{{\textnormal{i}}} +\def\rj{{\textnormal{j}}} +\def\rk{{\textnormal{k}}} +\def\rl{{\textnormal{l}}} +% rm is already a command, just don't name any random variables m +\def\rn{{\textnormal{n}}} +\def\ro{{\textnormal{o}}} +\def\rp{{\textnormal{p}}} +\def\rq{{\textnormal{q}}} +\def\rr{{\textnormal{r}}} +\def\rs{{\textnormal{s}}} +\def\rt{{\textnormal{t}}} +\def\ru{{\textnormal{u}}} +\def\rv{{\textnormal{v}}} +\def\rw{{\textnormal{w}}} +\def\rx{{\textnormal{x}}} +\def\ry{{\textnormal{y}}} +\def\rz{{\textnormal{z}}} + +% Random vectors +\def\rvepsilon{{\mathbf{\epsilon}}} +\def\rvtheta{{\mathbf{\theta}}} +\def\rva{{\mathbf{a}}} +\def\rvb{{\mathbf{b}}} +\def\rvc{{\mathbf{c}}} +\def\rvd{{\mathbf{d}}} +\def\rve{{\mathbf{e}}} +\def\rvf{{\mathbf{f}}} +\def\rvg{{\mathbf{g}}} +\def\rvh{{\mathbf{h}}} +\def\rvu{{\mathbf{i}}} +\def\rvj{{\mathbf{j}}} +\def\rvk{{\mathbf{k}}} +\def\rvl{{\mathbf{l}}} +\def\rvm{{\mathbf{m}}} +\def\rvn{{\mathbf{n}}} +\def\rvo{{\mathbf{o}}} +\def\rvp{{\mathbf{p}}} +\def\rvq{{\mathbf{q}}} +\def\rvr{{\mathbf{r}}} +\def\rvs{{\mathbf{s}}} +\def\rvt{{\mathbf{t}}} +\def\rvu{{\mathbf{u}}} +\def\rvv{{\mathbf{v}}} +\def\rvw{{\mathbf{w}}} +\def\rvx{{\mathbf{x}}} +\def\rvy{{\mathbf{y}}} +\def\rvz{{\mathbf{z}}} + +% Elements of random vectors +\def\erva{{\textnormal{a}}} +\def\ervb{{\textnormal{b}}} +\def\ervc{{\textnormal{c}}} +\def\ervd{{\textnormal{d}}} +\def\erve{{\textnormal{e}}} +\def\ervf{{\textnormal{f}}} +\def\ervg{{\textnormal{g}}} +\def\ervh{{\textnormal{h}}} +\def\ervi{{\textnormal{i}}} +\def\ervj{{\textnormal{j}}} +\def\ervk{{\textnormal{k}}} +\def\ervl{{\textnormal{l}}} +\def\ervm{{\textnormal{m}}} +\def\ervn{{\textnormal{n}}} +\def\ervo{{\textnormal{o}}} +\def\ervp{{\textnormal{p}}} +\def\ervq{{\textnormal{q}}} +\def\ervr{{\textnormal{r}}} +\def\ervs{{\textnormal{s}}} +\def\ervt{{\textnormal{t}}} +\def\ervu{{\textnormal{u}}} +\def\ervv{{\textnormal{v}}} +\def\ervw{{\textnormal{w}}} +\def\ervx{{\textnormal{x}}} +\def\ervy{{\textnormal{y}}} +\def\ervz{{\textnormal{z}}} + +% Random matrices +\def\rmA{{\mathbf{A}}} +\def\rmB{{\mathbf{B}}} +\def\rmC{{\mathbf{C}}} +\def\rmD{{\mathbf{D}}} +\def\rmE{{\mathbf{E}}} +\def\rmF{{\mathbf{F}}} +\def\rmG{{\mathbf{G}}} +\def\rmH{{\mathbf{H}}} +\def\rmI{{\mathbf{I}}} +\def\rmJ{{\mathbf{J}}} +\def\rmK{{\mathbf{K}}} +\def\rmL{{\mathbf{L}}} +\def\rmM{{\mathbf{M}}} +\def\rmN{{\mathbf{N}}} +\def\rmO{{\mathbf{O}}} +\def\rmP{{\mathbf{P}}} +\def\rmQ{{\mathbf{Q}}} +\def\rmR{{\mathbf{R}}} +\def\rmS{{\mathbf{S}}} +\def\rmT{{\mathbf{T}}} +\def\rmU{{\mathbf{U}}} +\def\rmV{{\mathbf{V}}} +\def\rmW{{\mathbf{W}}} +\def\rmX{{\mathbf{X}}} +\def\rmY{{\mathbf{Y}}} +\def\rmZ{{\mathbf{Z}}} + +% Elements of random matrices +\def\ermA{{\textnormal{A}}} +\def\ermB{{\textnormal{B}}} +\def\ermC{{\textnormal{C}}} +\def\ermD{{\textnormal{D}}} +\def\ermE{{\textnormal{E}}} +\def\ermF{{\textnormal{F}}} +\def\ermG{{\textnormal{G}}} +\def\ermH{{\textnormal{H}}} +\def\ermI{{\textnormal{I}}} +\def\ermJ{{\textnormal{J}}} +\def\ermK{{\textnormal{K}}} +\def\ermL{{\textnormal{L}}} +\def\ermM{{\textnormal{M}}} +\def\ermN{{\textnormal{N}}} +\def\ermO{{\textnormal{O}}} +\def\ermP{{\textnormal{P}}} +\def\ermQ{{\textnormal{Q}}} +\def\ermR{{\textnormal{R}}} +\def\ermS{{\textnormal{S}}} +\def\ermT{{\textnormal{T}}} +\def\ermU{{\textnormal{U}}} +\def\ermV{{\textnormal{V}}} +\def\ermW{{\textnormal{W}}} +\def\ermX{{\textnormal{X}}} +\def\ermY{{\textnormal{Y}}} +\def\ermZ{{\textnormal{Z}}} + +% Vectors +\def\vzero{{\bm{0}}} +\def\vone{{\bm{1}}} +\def\vmu{{\bm{\mu}}} +\def\vtheta{{\bm{\theta}}} +\def\va{{\bm{a}}} +\def\vb{{\bm{b}}} +\def\vc{{\bm{c}}} +\def\vd{{\bm{d}}} +\def\ve{{\bm{e}}} +\def\vf{{\bm{f}}} +\def\vg{{\bm{g}}} +\def\vh{{\bm{h}}} +\def\vi{{\bm{i}}} +\def\vj{{\bm{j}}} +\def\vk{{\bm{k}}} +\def\vl{{\bm{l}}} +\def\vm{{\bm{m}}} +\def\vn{{\bm{n}}} +\def\vo{{\bm{o}}} +\def\vp{{\bm{p}}} +\def\vq{{\bm{q}}} +\def\vr{{\bm{r}}} +\def\vs{{\bm{s}}} +\def\vt{{\bm{t}}} +\def\vu{{\bm{u}}} +\def\vv{{\bm{v}}} +\def\vw{{\bm{w}}} +\def\vx{{\bm{x}}} +\def\vy{{\bm{y}}} +\def\vz{{\bm{z}}} + +% Elements of vectors +\def\evalpha{{\alpha}} +\def\evbeta{{\beta}} +\def\evepsilon{{\epsilon}} +\def\evlambda{{\lambda}} +\def\evomega{{\omega}} +\def\evmu{{\mu}} +\def\evpsi{{\psi}} +\def\evsigma{{\sigma}} +\def\evtheta{{\theta}} +\def\eva{{a}} +\def\evb{{b}} +\def\evc{{c}} +\def\evd{{d}} +\def\eve{{e}} +\def\evf{{f}} +\def\evg{{g}} +\def\evh{{h}} +\def\evi{{i}} +\def\evj{{j}} +\def\evk{{k}} +\def\evl{{l}} +\def\evm{{m}} +\def\evn{{n}} +\def\evo{{o}} +\def\evp{{p}} +\def\evq{{q}} +\def\evr{{r}} +\def\evs{{s}} +\def\evt{{t}} +\def\evu{{u}} +\def\evv{{v}} +\def\evw{{w}} +\def\evx{{x}} +\def\evy{{y}} +\def\evz{{z}} + +% Matrix +\def\mA{{\bm{A}}} +\def\mB{{\bm{B}}} +\def\mC{{\bm{C}}} +\def\mD{{\bm{D}}} +\def\mE{{\bm{E}}} +\def\mF{{\bm{F}}} +\def\mG{{\bm{G}}} +\def\mH{{\bm{H}}} +\def\mI{{\bm{I}}} +\def\mJ{{\bm{J}}} +\def\mK{{\bm{K}}} +\def\mL{{\bm{L}}} +\def\mM{{\bm{M}}} +\def\mN{{\bm{N}}} +\def\mO{{\bm{O}}} +\def\mP{{\bm{P}}} +\def\mQ{{\bm{Q}}} +\def\mR{{\bm{R}}} +\def\mS{{\bm{S}}} +\def\mT{{\bm{T}}} +\def\mU{{\bm{U}}} +\def\mV{{\bm{V}}} +\def\mW{{\bm{W}}} +\def\mX{{\bm{X}}} +\def\mY{{\bm{Y}}} +\def\mZ{{\bm{Z}}} +\def\mBeta{{\bm{\beta}}} +\def\mPhi{{\bm{\Phi}}} +\def\mLambda{{\bm{\Lambda}}} +\def\mSigma{{\bm{\Sigma}}} + +% Tensor +\DeclareMathAlphabet{\mathsfit}{\encodingdefault}{\sfdefault}{m}{sl} +\SetMathAlphabet{\mathsfit}{bold}{\encodingdefault}{\sfdefault}{bx}{n} +\newcommand{\tens}[1]{\bm{\mathsfit{#1}}} +\def\tA{{\tens{A}}} +\def\tB{{\tens{B}}} +\def\tC{{\tens{C}}} +\def\tD{{\tens{D}}} +\def\tE{{\tens{E}}} +\def\tF{{\tens{F}}} +\def\tG{{\tens{G}}} +\def\tH{{\tens{H}}} +\def\tI{{\tens{I}}} +\def\tJ{{\tens{J}}} +\def\tK{{\tens{K}}} +\def\tL{{\tens{L}}} +\def\tM{{\tens{M}}} +\def\tN{{\tens{N}}} +\def\tO{{\tens{O}}} +\def\tP{{\tens{P}}} +\def\tQ{{\tens{Q}}} +\def\tR{{\tens{R}}} +\def\tS{{\tens{S}}} +\def\tT{{\tens{T}}} +\def\tU{{\tens{U}}} +\def\tV{{\tens{V}}} +\def\tW{{\tens{W}}} +\def\tX{{\tens{X}}} +\def\tY{{\tens{Y}}} +\def\tZ{{\tens{Z}}} + + +% Graph +\def\gA{{\mathcal{A}}} +\def\gB{{\mathcal{B}}} +\def\gC{{\mathcal{C}}} +\def\gD{{\mathcal{D}}} +\def\gE{{\mathcal{E}}} +\def\gF{{\mathcal{F}}} +\def\gG{{\mathcal{G}}} +\def\gH{{\mathcal{H}}} +\def\gI{{\mathcal{I}}} +\def\gJ{{\mathcal{J}}} +\def\gK{{\mathcal{K}}} +\def\gL{{\mathcal{L}}} +\def\gM{{\mathcal{M}}} +\def\gN{{\mathcal{N}}} +\def\gO{{\mathcal{O}}} +\def\gP{{\mathcal{P}}} +\def\gQ{{\mathcal{Q}}} +\def\gR{{\mathcal{R}}} +\def\gS{{\mathcal{S}}} +\def\gT{{\mathcal{T}}} +\def\gU{{\mathcal{U}}} +\def\gV{{\mathcal{V}}} +\def\gW{{\mathcal{W}}} +\def\gX{{\mathcal{X}}} +\def\gY{{\mathcal{Y}}} +\def\gZ{{\mathcal{Z}}} + +% Sets +\def\sA{{\mathbb{A}}} +\def\sB{{\mathbb{B}}} +\def\sC{{\mathbb{C}}} +\def\sD{{\mathbb{D}}} +% Don't use a set called E, because this would be the same as our symbol +% for expectation. +\def\sF{{\mathbb{F}}} +\def\sG{{\mathbb{G}}} +\def\sH{{\mathbb{H}}} +\def\sI{{\mathbb{I}}} +\def\sJ{{\mathbb{J}}} +\def\sK{{\mathbb{K}}} +\def\sL{{\mathbb{L}}} +\def\sM{{\mathbb{M}}} +\def\sN{{\mathbb{N}}} +\def\sO{{\mathbb{O}}} +\def\sP{{\mathbb{P}}} +\def\sQ{{\mathbb{Q}}} +\def\sR{{\mathbb{R}}} +\def\sS{{\mathbb{S}}} +\def\sT{{\mathbb{T}}} +\def\sU{{\mathbb{U}}} +\def\sV{{\mathbb{V}}} +\def\sW{{\mathbb{W}}} +\def\sX{{\mathbb{X}}} +\def\sY{{\mathbb{Y}}} +\def\sZ{{\mathbb{Z}}} + +% Entries of a matrix +\def\emLambda{{\Lambda}} +\def\emA{{A}} +\def\emB{{B}} +\def\emC{{C}} +\def\emD{{D}} +\def\emE{{E}} +\def\emF{{F}} +\def\emG{{G}} +\def\emH{{H}} +\def\emI{{I}} +\def\emJ{{J}} +\def\emK{{K}} +\def\emL{{L}} +\def\emM{{M}} +\def\emN{{N}} +\def\emO{{O}} +\def\emP{{P}} +\def\emQ{{Q}} +\def\emR{{R}} +\def\emS{{S}} +\def\emT{{T}} +\def\emU{{U}} +\def\emV{{V}} +\def\emW{{W}} +\def\emX{{X}} +\def\emY{{Y}} +\def\emZ{{Z}} +\def\emSigma{{\Sigma}} + +% entries of a tensor +% Same font as tensor, without \bm wrapper +\newcommand{\etens}[1]{\mathsfit{#1}} +\def\etLambda{{\etens{\Lambda}}} +\def\etA{{\etens{A}}} +\def\etB{{\etens{B}}} +\def\etC{{\etens{C}}} +\def\etD{{\etens{D}}} +\def\etE{{\etens{E}}} +\def\etF{{\etens{F}}} +\def\etG{{\etens{G}}} +\def\etH{{\etens{H}}} +\def\etI{{\etens{I}}} +\def\etJ{{\etens{J}}} +\def\etK{{\etens{K}}} +\def\etL{{\etens{L}}} +\def\etM{{\etens{M}}} +\def\etN{{\etens{N}}} +\def\etO{{\etens{O}}} +\def\etP{{\etens{P}}} +\def\etQ{{\etens{Q}}} +\def\etR{{\etens{R}}} +\def\etS{{\etens{S}}} +\def\etT{{\etens{T}}} +\def\etU{{\etens{U}}} +\def\etV{{\etens{V}}} +\def\etW{{\etens{W}}} +\def\etX{{\etens{X}}} +\def\etY{{\etens{Y}}} +\def\etZ{{\etens{Z}}} + +% The true underlying data generating distribution +\newcommand{\pdata}{p_{\rm{data}}} +% The empirical distribution defined by the training set +\newcommand{\ptrain}{\hat{p}_{\rm{data}}} +\newcommand{\Ptrain}{\hat{P}_{\rm{data}}} +% The model distribution +\newcommand{\pmodel}{p_{\rm{model}}} +\newcommand{\Pmodel}{P_{\rm{model}}} +\newcommand{\ptildemodel}{\tilde{p}_{\rm{model}}} +% Stochastic autoencoder distributions +\newcommand{\pencode}{p_{\rm{encoder}}} +\newcommand{\pdecode}{p_{\rm{decoder}}} +\newcommand{\precons}{p_{\rm{reconstruct}}} + +\newcommand{\laplace}{\mathrm{Laplace}} % Laplace distribution + +\newcommand{\E}{\mathbb{E}} +\newcommand{\Ls}{\mathcal{L}} +\newcommand{\R}{\mathbb{R}} +\newcommand{\emp}{\tilde{p}} +\newcommand{\lr}{\alpha} +\newcommand{\reg}{\lambda} +\newcommand{\rect}{\mathrm{rectifier}} +\newcommand{\softmax}{\mathrm{softmax}} +\newcommand{\sigmoid}{\sigma} +\newcommand{\softplus}{\zeta} +\newcommand{\KL}{D_{\mathrm{KL}}} +\newcommand{\Var}{\mathrm{Var}} +\newcommand{\standarderror}{\mathrm{SE}} +\newcommand{\Cov}{\mathrm{Cov}} +% Wolfram Mathworld says $L^2$ is for function spaces and $\ell^2$ is for vectors +% But then they seem to use $L^2$ for vectors throughout the site, and so does +% wikipedia. +\newcommand{\normlzero}{L^0} +\newcommand{\normlone}{L^1} +\newcommand{\normltwo}{L^2} +\newcommand{\normlp}{L^p} +\newcommand{\normmax}{L^\infty} + +\newcommand{\parents}{Pa} % See usage in notation.tex. Chosen to match Daphne's book. + +\DeclareMathOperator*{\argmax}{arg\,max} +\DeclareMathOperator*{\argmin}{arg\,min} + +\DeclareMathOperator{\sign}{sign} +\DeclareMathOperator{\Tr}{Tr} +\let\ab\allowbreak diff --git a/auto_survey/outputs/outputs_20230707_202302/ref.bib b/auto_survey/outputs/outputs_20230707_202302/ref.bib new file mode 100644 index 0000000..a3067c3 --- /dev/null +++ b/auto_survey/outputs/outputs_20230707_202302/ref.bib @@ -0,0 +1,832 @@ +@article{geiger2013vision, + title = {Vision meets robotics: The KITTI dataset}, + author = {Andreas Geiger and Philip Lenz and C. Stiller and R. Urtasun}, + journal={Int. J. Robotics Res.}, + year = {2013}, + url = {dblp.org/rec/journals/ijrr/GeigerLSU13} + } + +@article{whitesides2022soft, + title = {Soft Robotics.}, + author = {G. Whitesides}, + journal={Angewandte Chemie}, + year = {2022}, + url = {} + } + +@article{thrun2002probabilistic, + title = {Probabilistic robotics}, + author = {S. Thrun}, + journal={CACM}, + year = {2002}, + url = {dblp.org/rec/books/daglib/0014221} + } + +@article{arkin1998an, + title = {An Behavior-based Robotics}, + author = {R. Arkin}, + journal={arXiv preprint}, + year = {1998}, + url = {} + } + +@article{christensen2021a, + title = {A Roadmap for US Robotics - From Internet to Robotics 2020 Edition}, + author = {Henrik I. Christensen and N. Amato and H. Yanco and M. Matarić and H. Choset and Ann W. Drobnis and Ken Goldberg and J. Grizzle and Gregory Hager and J. Hollerbach and Seth Hutchinson and V. Krovi and Daniel Lee and Billy Smart and J. Trinkle and G. Sukhatme}, + journal={Found. Trends Robotics}, + year = {2021}, + url = {dblp.org/rec/journals/ftrob/ChristensenAYMC21} + } + +@article{craig1986introduction, + title = {Introduction to Robotics Mechanics and Control}, + author = {J. Craig}, + journal={arXiv preprint}, + year = {1986}, + url = {} + } + +@article{yang2020combating, + title = {Combating COVID-19—The role of robotics in managing public health and infectious diseases}, + author = {Guang-Zhong Yang and Bradley J. Nelson and R. Murphy and H. Choset and Henrik Christensen and Steven H. Collins and P. Dario and Ken Goldberg and K. Ikuta and N. Jacobstein and D. Kragic and Russell H. Taylor and Marcia K McNutt}, + journal={Science Robotics}, + year = {2020}, + url = {dblp.org/rec/journals/scirobotics/NelsonMCCCDGIJK20} + } + +@article{zeng2020from, + title = {From high-touch to high-tech: COVID-19 drives robotics adoption}, + author = {Zhanjing Zeng and Po-Ju Chen and A. Lew}, + journal={arXiv preprint}, + year = {2020}, + url = {} + } + +@article{haarnoja2018soft, + title = {Soft Actor-Critic: Off-Policy Maximum Entropy Deep Reinforcement Learning with a Stochastic Actor}, + author = {Tuomas Haarnoja and Aurick Zhou and P. Abbeel and S. Levine}, + journal={International Conference on Machine Learning}, + year = {2018}, + url = {dblp.org/rec/conf/icml/HaarnojaZAL18} + } + +@article{mnih2016asynchronous, + title = {Asynchronous Methods for Deep Reinforcement Learning}, + author = {Volodymyr Mnih and Adrià Puigdomènech Badia and Mehdi Mirza and A. Graves and T. Lillicrap and Tim Harley and David Silver and K. Kavukcuoglu}, + journal={International Conference on Machine Learning}, + year = {2016}, + url = {dblp.org/rec/journals/corr/MnihBMGLHSK16} + } + +@article{zoph2016neural, + title = {Neural Architecture Search with Reinforcement Learning}, + author = {Barret Zoph and Quoc V. Le}, + journal={International Conference on Learning Representations}, + year = {2016}, + url = {dblp.org/rec/conf/iclr/ZophL17} + } + +@article{mnih2013playing, + title = {Playing Atari with Deep Reinforcement Learning}, + author = {Volodymyr Mnih and K. Kavukcuoglu and David Silver and A. Graves and Ioannis Antonoglou and Daan Wierstra and Martin A. Riedmiller}, + journal={arXiv.org}, + year = {2013}, + url = {dblp.org/rec/journals/corr/MnihKSGAWR13} + } + +@article{lillicrap2015continuous, + title = {Continuous control with deep reinforcement learning}, + author = {T. Lillicrap and Jonathan J. Hunt and A. Pritzel and N. Heess and T. Erez and Yuval Tassa and David Silver and Daan Wierstra}, + journal={International Conference on Learning Representations}, + year = {2015}, + url = {dblp.org/rec/journals/corr/LillicrapHPHETS15} + } + +@article{hasselt2015deep, + title = {Deep Reinforcement Learning with Double Q-Learning}, + author = {H. V. Hasselt and A. Guez and David Silver}, + journal={AAAI Conference on Artificial Intelligence}, + year = {2015}, + url = {dblp.org/rec/journals/corr/HasseltGS15} + } + +@article{sutton2005reinforcement, + title = {Reinforcement Learning: An Introduction}, + author = {R. Sutton and A. Barto}, + journal={IEEE Transactions on Neural Networks}, + year = {2005}, + url = {dblp.org/rec/journals/tnn/SuttonB98} + } + +@article{silver2018a, + title = {A general reinforcement learning algorithm that masters chess, shogi, and Go through self-play}, + author = {David Silver and T. Hubert and Julian Schrittwieser and Ioannis Antonoglou and Matthew Lai and A. Guez and Marc Lanctot and L. Sifre and D. Kumaran and T. Graepel and T. Lillicrap and K. Simonyan and D. Hassabis}, + journal={Science}, + year = {2018}, + url = {} + } + +@article{jensen1993the, + title = {The Modern Industrial Revolution, Exit, and the Failure of Internal Control Systems}, + author = {M. C. Jensen}, + journal={A Theory of the Firm}, + year = {1993}, + url = {} + } + +@article{hu2021a, + title = {A survey on sliding mode control for networked control systems}, + author = {Jun Hu and Hongxu Zhang and Hongjian Liu and Xiaoyang Yu}, + journal={International Journal of Systems Science}, + year = {2021}, + url = {dblp.org/rec/journals/ijsysc/HuZLY21} + } + +@article{tanaka2008fuzzy, + title = {Fuzzy Control Systems Design and Analysis: A Linear Matrix Inequality Approach}, + author = {Kazuo Tanaka and H. Wang}, + journal={arXiv preprint}, + year = {2008}, + url = {dblp.org/rec/books/wi/TanakaW01} + } + +@article{anthony2020management, + title = {Management Control Systems}, + author = {R. Anthony and V. Govindarajan}, + journal={Management Control Systems and Tools for Internationalization Success}, + year = {2020}, + url = {} + } + +@article{zhang2020networked, + title = {Networked control systems: a survey of trends and techniques}, + author = {Xianming Zhang and Q. Han and Xiaohua Ge and Derui Ding and Lei Ding and D. Yue and Chen Peng}, + journal={IEEE/CAA Journal of Automatica Sinica}, + year = {2020}, + url = {} + } + +@article{kwakernaak1972linear, + title = {Linear Optimal Control Systems}, + author = {H. Kwakernaak and R. Sivan}, + journal={arXiv preprint}, + year = {1972}, + url = {} + } + +@article{naidu2018optimal, + title = {Optimal Control Systems}, + author = {D. Naidu and S. Naidu and R. Dorf}, + journal={arXiv preprint}, + year = {2018}, + url = {} + } + +@article{mackey1977oscillation, + title = {Oscillation and chaos in physiological control systems.}, + author = {M. Mackey and L. Glass}, + journal={Science}, + year = {1977}, + url = {} + } + +@article{hespanha2007a, + title = {A Survey of Recent Results in Networked Control Systems}, + author = {J. Hespanha and P. Naghshtabrizi and YongGang Xu}, + journal={Proceedings of the IEEE}, + year = {2007}, + url = {dblp.org/rec/journals/pieee/HespanhaNX07} + } + +@article{adadi2018peeking, + title = {Peeking Inside the Black-Box: A Survey on Explainable Artificial Intelligence (XAI)}, + author = {Amina Adadi and M. Berrada}, + journal={IEEE Access}, + year = {2018}, + url = {dblp.org/rec/journals/access/AdadiB18} + } + +@article{ridley2022explainable, + title = {Explainable Artificial Intelligence (XAI)}, + author = {M. Ridley}, + journal={Information Technology and Libraries}, + year = {2022}, + url = {} + } + +@article{russell1995artificial, + title = {Artificial Intelligence: A Modern Approach}, + author = {Stuart J. Russell and Peter Norvig}, + journal={arXiv preprint}, + year = {1995}, + url = {} + } + +@article{ma2022artificial, + title = {Artificial Intelligence A Modern Approach Global Edition}, + author = {}, + journal={arXiv preprint}, + year = {2022}, + url = {} + } + +@article{holland1992adaptation, + title = {Adaptation in Natural and Artificial Systems: An Introductory Analysis with Applications to Biology, Control, and Artificial Intelligence}, + author = {J. Holland}, + journal={arXiv preprint}, + year = {1992}, + url = {dblp.org/rec/books/mit/H1992} + } + +@article{kaur2022trustworthy, + title = {Trustworthy Artificial Intelligence: A Review}, + author = {Davinder Kaur and Suleyman Uslu and Kaley J. Rittichier and A. Durresi}, + journal={ACM Computing Surveys}, + year = {2022}, + url = {dblp.org/rec/journals/csur/KaurURD23} + } + +@article{xiao2017fashion, + title = {Fashion-MNIST: a Novel Image Dataset for Benchmarking Machine Learning Algorithms}, + author = {Han Xiao and Kashif Rasul and Roland Vollgraf}, + journal={arXiv.org}, + year = {2017}, + url = {dblp.org/rec/journals/corr/abs-1708-07747} + } + +@article{abadi2016tensorflow, + title = {TensorFlow: A system for large-scale machine learning}, + author = {Martín Abadi and P. Barham and Jianmin Chen and Z. Chen and Andy Davis and J. Dean and Matthieu Devin and S. Ghemawat and G. Irving and M. Isard and M. Kudlur and J. Levenberg and R. Monga and Sherry Moore and D. Murray and Benoit Steiner and P. Tucker and Vijay Vasudevan and P. Warden and M. Wicke and Yuan Yu and Xiaoqiang Zhang}, + journal={USENIX Symposium on Operating Systems Design and Implementation}, + year = {2016}, + url = {dblp.org/rec/conf/osdi/AbadiBCCDDDGIIK16} + } + +@article{shi2015convolutional, + title = {Convolutional LSTM Network: A Machine Learning Approach for Precipitation Nowcasting}, + author = {Xingjian Shi and Zhourong Chen and Hao Wang and D. Yeung and W. Wong and W. Woo}, + journal={NIPS}, + year = {2015}, + url = {dblp.org/rec/journals/corr/ShiCWYWW15} + } + +@article{jordan2015machine, + title = {Machine learning: Trends, perspectives, and prospects}, + author = {Michael I. Jordan and T. Mitchell}, + journal={Science}, + year = {2015}, + url = {} + } + +@article{murphy2012machine, + title = {Machine learning - a probabilistic perspective}, + author = {K. Murphy}, + journal={Adaptive computation and machine learning series}, + year = {2012}, + url = {dblp.org/rec/books/lib/Murphy12} + } + +@article{shalev-shwartz2014understanding, + title = {Understanding Machine Learning - From Theory to Algorithms}, + author = {S. Shalev-Shwartz and Shai Ben-David}, + journal={arXiv preprint}, + year = {2014}, + url = {dblp.org/rec/books/daglib/0033642} + } + +@article{pedregosa2011scikit, + title = {Scikit-learn: Machine Learning in Python}, + author = {Fabian Pedregosa and G. Varoquaux and Alexandre Gramfort and V. Michel and B. Thirion and O. Grisel and Mathieu Blondel and Gilles Louppe and P. Prettenhofer and Ron Weiss and Ron J. Weiss and J. Vanderplas and Alexandre Passos and D. Cournapeau and M. Brucher and M. Perrot and E. Duchesnay}, + journal={Journal of machine learning research}, + year = {2011}, + url = {dblp.org/rec/journals/jmlr/PedregosaVGMTGBPWDVPCBPD11} + } + +@article{margolis2022rapid, + title = {Rapid Locomotion via Reinforcement Learning}, + author = {G. Margolis and Ge Yang and Kartik Paigwar and Tao Chen and Pulkit Agrawal}, + journal={Robotics}, + year = {2022}, + url = {dblp.org/rec/journals/corr/abs-2205-02824} + } + +@article{li2021reinforcement, + title = {Reinforcement Learning for Robust Parameterized Locomotion Control of Bipedal Robots}, + author = {Zhongyu Li and Xuxin Cheng and X. B. Peng and P. Abbeel and S. Levine and G. Berseth and K. Sreenath}, + journal={IEEE International Conference on Robotics and Automation}, + year = {2021}, + url = {dblp.org/rec/journals/corr/abs-2103-14295} + } + +@article{siekmann2021blind, + title = {Blind Bipedal Stair Traversal via Sim-to-Real Reinforcement Learning}, + author = {Jonah Siekmann and Kevin R. Green and John Warila and Alan Fern and J. Hurst}, + journal={Robotics: Science and Systems}, + year = {2021}, + url = {dblp.org/rec/conf/rss/SiekmannGWFH21} + } + +@article{liu2021deep, + title = {Deep Reinforcement Learning for the Control of Robotic Manipulation: A Focussed Mini-Review}, + author = {Rongrong Liu and F. Nageotte and P. Zanne and M. Mathelin and Birgitta Dresp}, + journal={Robotics}, + year = {2021}, + url = {dblp.org/rec/journals/robotics/LiuNZMD21} + } + +@article{morgan2021model, + title = {Model Predictive Actor-Critic: Accelerating Robot Skill Acquisition with Deep Reinforcement Learning}, + author = {A. S. Morgan and Daljeet Nandha and G. Chalvatzaki and Carlo D'Eramo and A. Dollar and Jan Peters}, + journal={IEEE International Conference on Robotics and Automation}, + year = {2021}, + url = {dblp.org/rec/journals/corr/abs-2103-13842} + } + +@article{nasiriany2021augmenting, + title = {Augmenting Reinforcement Learning with Behavior Primitives for Diverse Manipulation Tasks}, + author = {Soroush Nasiriany and Huihan Liu and Yuke Zhu}, + journal={IEEE International Conference on Robotics and Automation}, + year = {2021}, + url = {dblp.org/rec/journals/corr/abs-2110-03655} + } + +@article{zhang2021learning, + title = {Learning Variable Impedance Control via Inverse Reinforcement Learning for Force-Related Tasks}, + author = {Xiang Zhang and Liting Sun and Zhian Kuang and M. Tomizuka}, + journal={IEEE Robotics and Automation Letters}, + year = {2021}, + url = {dblp.org/rec/journals/ral/ZhangSKT21} + } + +@article{honerkamp2021learning, + title = {Learning Kinematic Feasibility for Mobile Manipulation Through Deep Reinforcement Learning}, + author = {Daniel Honerkamp and T. Welschehold and Abhinav Valada}, + journal={IEEE Robotics and Automation Letters}, + year = {2021}, + url = {dblp.org/rec/journals/ral/HonerkampWV21} + } + +@article{makhataeva2020augmented, + title = {Augmented Reality for Robotics: A Review}, + author = {Z. Makhataeva and H. A. Varol}, + journal={Robotics}, + year = {2020}, + url = {dblp.org/rec/journals/robotics/MakhataevaV20} + } + +@article{agrawal2017discrete, + title = {Discrete Control Barrier Functions for Safety-Critical Control of Discrete Systems with Application to Bipedal Robot Navigation}, + author = {Ayush Agrawal and K. Sreenath}, + journal={Robotics: Science and Systems}, + year = {2017}, + url = {dblp.org/rec/conf/rss/AgrawalS17} + } + +@article{zhang2014control, + title = {Control of robotic mobility-on-demand systems: A queueing-theoretical perspective}, + author = {Rick Zhang and M. Pavone}, + journal={Int. J. Robotics Res.}, + year = {2014}, + url = {dblp.org/rec/journals/ijrr/ZhangP16} + } + +@article{he2019underactuated, + title = {Underactuated robotics: A review}, + author = {Bin He and Shuai Wang and Yongjia Liu}, + journal={International Journal of Advanced Robotic Systems}, + year = {2019}, + url = {} + } + +@article{antonelli2014decentralized, + title = {Decentralized time-varying formation control for multi-robot systems}, + author = {G. Antonelli and F. Arrichiello and F. Caccavale and A. Marino}, + journal={Int. J. Robotics Res.}, + year = {2014}, + url = {dblp.org/rec/journals/ijrr/AntonelliACM14} + } + +@article{sabattini2013decentralized, + title = {Decentralized connectivity maintenance for cooperative control of mobile robotic systems}, + author = {Lorenzo Sabattini and N. Chopra and C. Secchi}, + journal={Int. J. Robotics Res.}, + year = {2013}, + url = {dblp.org/rec/journals/ijrr/SabattiniCS13} + } + +@article{katz2019mini, + title = {Mini Cheetah: A Platform for Pushing the Limits of Dynamic Quadruped Control}, + author = {Benjamin Katz and J. Carlo and Sangbae Kim}, + journal={IEEE International Conference on Robotics and Automation}, + year = {2019}, + url = {dblp.org/rec/conf/icra/KatzCK19} + } + +@article{zelazo2013decentralized, + title = {Decentralized rigidity maintenance control with range measurements for multi-robot systems}, + author = {Daniel Zelazo and A. Franchi and H. Bülthoff and P. Giordano}, + journal={Int. J. Robotics Res.}, + year = {2013}, + url = {dblp.org/rec/journals/ijrr/ZelazoFBG15} + } + +@article{wang2017safety, + title = {Safety Barrier Certificates for Collisions-Free Multirobot Systems}, + author = {Li Wang and A. Ames and M. Egerstedt}, + journal={IEEE Transactions on robotics}, + year = {2017}, + url = {dblp.org/rec/journals/trob/WangAE17} + } + +@article{edelman2019noninvasive, + title = {Noninvasive neuroimaging enhances continuous neural tracking for robotic device control}, + author = {B. Edelman and J. Meng and D. Suma and C. Zurn and E. Nagarajan and B. Baxter and C. C. Cline and B. He}, + journal={Science Robotics}, + year = {2019}, + url = {dblp.org/rec/journals/scirobotics/EdelmanMSZNBCH19} + } + +@article{zhao2021applications, + title = {Applications of Robotics, Artificial Intelligence, and Digital Technologies During COVID-19: A Review}, + author = {Zhuo Zhao and Yangmyung Ma and A. Mushtaq and A. M. A. Rajper and Mahmoud Shehab and A. Heybourne and Wenzhan Song and Hongliang Ren and Z. Tse}, + journal={Disaster Medicine and Public Health Preparedness}, + year = {2021}, + url = {} + } + +@article{goel2022consumers, + title = {Consumers’ adoption of artificial intelligence and robotics in hospitality and tourism sector: literature review and future research agenda}, + author = {P. Goel and N. Kaushik and Brijesh Sivathanu and Rajasshrie Pillai and Jasper Vikas}, + journal={The Tourist Review}, + year = {2022}, + url = {} + } + +@article{vrontis2021artificial, + title = {Artificial intelligence, robotics, advanced technologies and human resource management: a systematic review}, + author = {D. Vrontis and M. Christofi and V. Pereira and S. Tarba and Anna Makrides and Eleni Trichina}, + journal={International journal of human resources management}, + year = {2021}, + url = {} + } + +@article{gaur2021role, + title = {Role of artificial intelligence and robotics to foster the touchless travel during a pandemic: a review and research agenda}, + author = {Loveleen Gaur and Anam Afaq and Gurmeet Singh and Yogesh Kumar Dwivedi}, + journal={International Journal of Contemporary Hospitality Management}, + year = {2021}, + url = {} + } + +@article{kim2021review, + title = {Review of machine learning methods in soft robotics}, + author = {Daekyum Kim and Sang-Hun Kim and Taekyoung Kim and B. B. Kang and Minhyuk Lee and Wookeun Park and Subyeong Ku and Dongwook Kim and Junghan Kwon and Hochang Lee and J. Bae and Yong‐Lae Park and Kyu-Jin Cho and Sungho Jo}, + journal={PLoS ONE}, + year = {2021}, + url = {} + } + +@article{lins2021cooperative, + title = {Cooperative Robotics and Machine Learning for Smart Manufacturing: Platform Design and Trends Within the Context of Industrial Internet of Things}, + author = {R. Lins and S. Givigi}, + journal={IEEE Access}, + year = {2021}, + url = {dblp.org/rec/journals/access/LinsG21} + } + +@article{shimizu2020autonomous, + title = {Autonomous materials synthesis by machine learning and robotics}, + author = {R. Shimizu and Shigeru Kobayashi and Yuki Watanabe and Y. Ando and T. Hitosugi}, + journal={arXiv preprint}, + year = {2020}, + url = {} + } + +@article{liang2022foundations, + title = {Foundations and Recent Trends in Multimodal Machine Learning: Principles, Challenges, and Open Questions}, + author = {P. Liang and Amir Zadeh and Louis-Philippe Morency}, + journal={arXiv.org}, + year = {2022}, + url = {dblp.org/rec/journals/corr/abs-2209-03430} + } + +@article{wang2019artificial, + title = {Artificial Intelligence, Machine Learning, Automation, Robotics, Future of Work and Future of Humanity: A Review and Research Agenda}, + author = {Weiyu Wang and K. Siau}, + journal={Journal of Database Management}, + year = {2019}, + url = {dblp.org/rec/journals/jdm/WangS19} + } + +@article{majumdar2019a, + title = {A Survey of Recent Scalability Improvements for Semidefinite Programming with Applications in Machine Learning, Control, and Robotics}, + author = {Anirudha Majumdar and G. Hall and Amir Ali Ahmadi}, + journal={Annu. Rev. Control. Robotics Auton. Syst.}, + year = {2019}, + url = {dblp.org/rec/journals/arcras/MajumdarHA20} + } + +@article{polzounov2020blue, + title = {Blue River Controls: A toolkit for Reinforcement Learning Control Systems on Hardware}, + author = {Kirill Polzounov and R. Sundar and L. Redden}, + journal={arXiv.org}, + year = {2020}, + url = {dblp.org/rec/journals/corr/abs-2001-02254} + } + +@article{tran2019safety, + title = {Safety Verification of Cyber-Physical Systems with Reinforcement Learning Control}, + author = {Hoang-Dung Tran and Feiyang Cai and Diego Manzanas Lopez and Patrick Musau and Taylor T. Johnson and X. Koutsoukos}, + journal={ACM Transactions on Embedded Computing Systems}, + year = {2019}, + url = {dblp.org/rec/journals/tecs/TranCLMJK19} + } + +@article{liu2019adaptive, + title = {Adaptive Reinforcement Learning Control Based on Neural Approximation for Nonlinear Discrete-Time Systems With Unknown Nonaffine Dead-Zone Input}, + author = {Yanjun Liu and Shu Li and Shaocheng Tong and C. L. P. Chen}, + journal={IEEE Transactions on Neural Networks and Learning Systems}, + year = {2019}, + url = {dblp.org/rec/journals/tnn/Liu0TC19} + } + +@article{meyn2022control, + title = {Control Systems and Reinforcement Learning}, + author = {Sean P. Meyn}, + journal={arXiv preprint}, + year = {2022}, + url = {} + } + +@article{wang2021data, + title = {Data-Driven Performance-Prescribed Reinforcement Learning Control of an Unmanned Surface Vehicle}, + author = {Ning Wang and Ying Gao and Xuefeng Zhang}, + journal={IEEE Transactions on Neural Networks and Learning Systems}, + year = {2021}, + url = {} + } + +@article{waltz1965a, + title = {A heuristic approach to reinforcement learning control systems}, + author = {M. Waltz and K. Fu}, + journal={arXiv preprint}, + year = {1965}, + url = {} + } + +@article{he2020reinforcement, + title = {Reinforcement Learning Control of a Flexible Two-Link Manipulator: An Experimental Investigation}, + author = {Wei He and Hejia Gao and Chen Zhou and Chenguang Yang and Zhijun Li}, + journal={IEEE Transactions on Systems, Man, and Cybernetics: Systems}, + year = {2020}, + url = {dblp.org/rec/journals/tsmc/HeGZYL21} + } + +@article{gao2020reinforcement, + title = {Reinforcement Learning Control of Robotic Knee With Human-in-the-Loop by Flexible Policy Iteration}, + author = {Xiang Gao and J. Si and Yue Wen and Minhan Li and H. Huang}, + journal={IEEE Transactions on Neural Networks and Learning Systems}, + year = {2020}, + url = {dblp.org/rec/journals/corr/abs-2006-09008} + } + +@article{thornton2020deep, + title = {Deep Reinforcement Learning Control for Radar Detection and Tracking in Congested Spectral Environments}, + author = {C. Thornton and Mark A. Kozy and R. Buehrer and A. Martone and K. Sherbondy}, + journal={IEEE Transactions on Cognitive Communications and Networking}, + year = {2020}, + url = {dblp.org/rec/journals/corr/abs-2006-13173} + } + +@article{zhao2022alphaholdem, + title = {AlphaHoldem: High-Performance Artificial Intelligence for Heads-Up No-Limit Poker via End-to-End Reinforcement Learning}, + author = {Enmin Zhao and Renye Yan and Jinqiu Li and Kai Li and Junliang Xing}, + journal={AAAI Conference on Artificial Intelligence}, + year = {2022}, + url = {dblp.org/rec/conf/aaai/ZhaoYLLX22} + } + +@article{ma2021algorithms, + title = {Algorithms For Reinforcement Learning Synthesis Lectures On Artificial Intelligence And Machine Learning Epdf Read}, + author = {}, + journal={arXiv preprint}, + year = {2021}, + url = {} + } + +@article{yang2021an, + title = {An Information Fusion Approach to Intelligent Traffic Signal Control Using the Joint Methods of Multiagent Reinforcement Learning and Artificial Intelligence of Things}, + author = {Xiaoxian Yang and Yueshen Xu and Li Kuang and Zhiying Wang and Honghao Gao and Xuejie Wang}, + journal={IEEE transactions on intelligent transportation systems (Print)}, + year = {2021}, + url = {dblp.org/rec/journals/tits/YangXKWGW22} + } + +@article{ribba2020model, + title = {Model‐Informed Artificial Intelligence: Reinforcement Learning for Precision Dosing}, + author = {B. Ribba and S. Dudal and T. Lavé and R. Peck}, + journal={Clinical pharmacology and therapy}, + year = {2020}, + url = {} + } + +@article{hrinivich2020artificial, + title = {Artificial intelligence-based radiotherapy machine parameter optimization using reinforcement learning.}, + author = {W. Hrinivich and Junghoon Lee}, + journal={Medical Physics (Lancaster)}, + year = {2020}, + url = {} + } + +@article{raffin2021stable, + title = {Stable-Baselines3: Reliable Reinforcement Learning Implementations}, + author = {Antonin Raffin and Ashley Hill and A. Gleave and Anssi Kanervisto and Maximilian Ernestus and Noah Dormann}, + journal={Journal of machine learning research}, + year = {2021}, + url = {dblp.org/rec/journals/jmlr/RaffinHGKED21} + } + +@article{sarikhani2020cooperative, + title = {Cooperative Spectrum Sensing Meets Machine Learning: Deep Reinforcement Learning Approach}, + author = {Rahil Sarikhani and F. Keynia}, + journal={IEEE Communications Letters}, + year = {2020}, + url = {dblp.org/rec/journals/icl/SarikhaniK20} + } + +@article{kiegeland2021revisiting, + title = {Revisiting the Weaknesses of Reinforcement Learning for Neural Machine Translation}, + author = {Samuel Kiegeland and Julia Kreutzer}, + journal={North American Chapter of the Association for Computational Linguistics}, + year = {2021}, + url = {dblp.org/rec/conf/naacl/KiegelandK21} + } + +@article{parker-holder2022automated, + title = {Automated Reinforcement Learning (AutoRL): A Survey and Open Problems}, + author = {Jack Parker-Holder and Raghunandan Rajan and Xingyou Song and André Biedenkapp and Yingjie Miao and Theresa Eimer and Baohe Zhang and V. Nguyen and R. Calandra and Aleksandra Faust and F. Hutter and M. Lindauer}, + journal={Journal of Artificial Intelligence Research}, + year = {2022}, + url = {dblp.org/rec/journals/corr/abs-2201-03916} + } + +@article{jiang2022automatic, + title = {Automatic Control Model of Power Information System Access Based on Artificial Intelligence Technology}, + author = {D. Jiang and Hong Zhang and Harish Kumar and Q. Naveed and Chandan Takhi and Vishal Jagota and Rituraj Jain}, + journal={Mathematical Problems in Engineering}, + year = {2022}, + url = {} + } + +@article{lv2021trustworthiness, + title = {Trustworthiness in Industrial IoT Systems Based on Artificial Intelligence}, + author = {Zhihan Lv and Yang Han and A. Singh and Gunasekaran Manogaran and Haibin Lv}, + journal={IEEE Transactions on Industrial Informatics}, + year = {2021}, + url = {dblp.org/rec/journals/tii/LvHSML21} + } + +@article{lopez2019arch, + title = {ARCH-COMP19 Category Report: Artificial Intelligence and Neural Network Control Systems (AINNCS) for Continuous and Hybrid Systems Plants}, + author = {Diego Manzanas Lopez and Patrick Musau and Hoang-Dung Tran and Souradeep Dutta and Taylor J. Carpenter and Radoslav Ivanov and Taylor T. Johnson}, + journal={ARCH@CPSIoTWeek}, + year = {2019}, + url = {dblp.org/rec/conf/arch/JohnsonLMTBLMSF20} + } + +@article{melnychenko2019application, + title = {Application of artificial intelligence in control systems of economic activity}, + author = {O. Melnychenko}, + journal={Virtual Economics}, + year = {2019}, + url = {} + } + +@article{ortner2022augmented, + title = {Augmented Air Traffic Control System—Artificial Intelligence as Digital Assistance System to Predict Air Traffic Conflicts}, + author = {Philipp Ortner and Raphael Steinhöfler and E. Leitgeb and H. Flühr}, + journal={Applied Informatics}, + year = {2022}, + url = {} + } + +@article{chen2020environmental, + title = {Environmental cost control system of manufacturing enterprises using artificial intelligence based on value chain of circular economy}, + author = {Min Chen and Qian Liu and Shuai Huang and Chenlu Dang}, + journal={Enterprise Information Systems}, + year = {2020}, + url = {dblp.org/rec/journals/eis/ChenLHD22} + } + +@article{hussain2021robotics, + title = {Robotics and Artificial Intelligence Applications in Manage and Control of COVID-19 Pandemic}, + author = {K. Hussain and Xingsong Wang and Zakary Omar and Muhanad Elnour and Yang Ming}, + journal={2021 International Conference on Computer, Control and Robotics (ICCCR)}, + year = {2021}, + url = {} + } + +@article{fu2022a, + title = {A Survey of Driving Safety With Sensing, Vehicular Communications, and Artificial Intelligence-Based Collision Avoidance}, + author = {Yuchuan Fu and Changle Li and F. Yu and T. Luan and Yao Zhang}, + journal={IEEE transactions on intelligent transportation systems (Print)}, + year = {2022}, + url = {dblp.org/rec/journals/tits/FuLYL022} + } + +@article{doumanidis2022icsml, + title = {ICSML: Industrial Control Systems Machine Learning Inference Framework natively executing on IEC 61131-3 compliant devices}, + author = {Constantine Doumanidis and Prashant Hari Narayan Rajput and M. Maniatakos}, + journal={arXiv preprint}, + year = {2022}, + url = {} + } + +@article{mokhtari2021a, + title = {A Machine Learning Approach for Anomaly Detection in Industrial Control Systems Based on Measurement Data}, + author = {S. Mokhtari and Alireza Abbaspour and K. Yen and A. Sargolzaei}, + journal={Electronics}, + year = {2021}, + url = {} + } + +@article{alsrehin2019intelligent, + title = {Intelligent Transportation and Control Systems Using Data Mining and Machine Learning Techniques: A Comprehensive Study}, + author = {Nawaf O. Alsrehin and Ahmad F. Klaib and Aws A. Magableh}, + journal={IEEE Access}, + year = {2019}, + url = {dblp.org/rec/journals/access/AlsrehinKM19} + } + +@article{fadlullah2017state, + title = {State-of-the-Art Deep Learning: Evolving Machine Intelligence Toward Tomorrow’s Intelligent Network Traffic Control Systems}, + author = {Z. Fadlullah and Fengxiao Tang and Bomin Mao and N. Kato and Osamu Akashi and Takeru Inoue and Kimihiro Mizutani}, + journal={IEEE Communications Surveys and Tutorials}, + year = {2017}, + url = {dblp.org/rec/journals/comsur/FadlullahTMKAIM17} + } + +@article{shahbazi2021integration, + title = {Integration of Blockchain, IoT and Machine Learning for Multistage Quality Control and Enhancing Security in Smart Manufacturing}, + author = {Zeinab Shahbazi and Y. Byun}, + journal={Italian National Conference on Sensors}, + year = {2021}, + url = {dblp.org/rec/journals/sensors/ShahbaziB21} + } + +@article{olowononi2021resilient, + title = {Resilient Machine Learning for Networked Cyber Physical Systems: A Survey for Machine Learning Security to Securing Machine Learning for CPS}, + author = {Felix O. Olowononi and D. Rawat and Chunmei Liu}, + journal={IEEE Communications Surveys and Tutorials}, + year = {2021}, + url = {dblp.org/rec/journals/corr/abs-2102-07244} + } + +@article{mijwil2022has, + title = {Has the Future Started? The Current Growth of Artificial Intelligence, Machine Learning, and Deep Learning}, + author = {Maad M. Mijwil}, + journal={Iraqi Journal for Computer Science and Mathematics}, + year = {2022}, + url = {} + } + +@article{woschank2020a, + title = {A Review of Further Directions for Artificial Intelligence, Machine Learning, and Deep Learning in Smart Logistics}, + author = {M. Woschank and E. Rauch and Helmut E. Zsifkovits}, + journal={arXiv preprint}, + year = {2020}, + url = {} + } + +@article{tanoli2021artificial, + title = {Artificial intelligence, machine learning, and drug repurposing in cancer}, + author = {Ziaurrehman Tanoli and M. Vähä-Koskela and T. Aittokallio}, + journal={Expert Opinion on Drug Discovery}, + year = {2021}, + url = {} + } + +@article{salih2021a, + title = {A Survey on the Role of Artificial Intelligence, Machine Learning and Deep Learning for Cybersecurity Attack Detection}, + author = {A. Salih and Subhi T. Zeebaree and Sadeeq Ameen and A. Alkhyyat and Hnan M. Shukur}, + journal={International Enformatika Conference}, + year = {2021}, + url = {} + } + +@article{panch2018artificial, + title = {Artificial intelligence, machine learning and health systems}, + author = {T. Panch and Peter Szolovits and R. Atun}, + journal={Journal of Global Health}, + year = {2018}, + url = {} + } + +@article{balyen2019promising, + title = {Promising Artificial Intelligence‐Machine Learning‐Deep Learning Algorithms in Ophthalmology}, + author = {L. Balyen and T. Peto}, + journal={Asia - Pacific Journal of Ophthalmology}, + year = {2019}, + url = {} + } + diff --git a/auto_survey/outputs/outputs_20230707_202302/related works.tex b/auto_survey/outputs/outputs_20230707_202302/related works.tex new file mode 100644 index 0000000..7edf550 --- /dev/null +++ b/auto_survey/outputs/outputs_20230707_202302/related works.tex @@ -0,0 +1,21 @@ +Learning Algorithms} + +Several key publications have contributed to the development of reinforcement learning (RL) algorithms for robot control. Mnih et al. \citep{mnih2013playing} introduced the first successful deep RL model, which learns control policies directly from high-dimensional sensory input. Lillicrap et al. \citep{lillicrap2015continuous} proposed an actor-critic algorithm based on deterministic policy gradients that can operate in continuous action spaces. Haarnoja et al. \citep{haarnoja2018soft} presented soft actor-critic, an off-policy RL algorithm that achieves state-of-the-art performance on continuous control tasks. He et al. \citep{he2020reinforcement} developed an RL control strategy based on the actor-critic structure for vibration suppression in a flexible two-link manipulator system. Liu et al. \citep{liu2021deep} addressed the challenges of sample efficiency and generalization in deep RL algorithms for robotic manipulation control. + +\paragraph{Benchmarking RL for Robot Control} + +Benchmarking RL algorithms in the context of robot control is crucial for evaluating their performance and comparing different approaches. Thrun et al. \citep{thrun2002probabilistic} proposed planning and navigation algorithms that exploit statistics from uncertain real-world environments to guide robots. Nasiriany et al. \citep{nasiriany2021augmenting} introduced Manipulation Primitive-augmented RL (MAPLE), a framework that combines RL algorithms with a library of behavior primitives for manipulation tasks. Parker-Holder et al. \citep{parker-holder2022automated} surveyed the field of automated RL (AutoRL) and provided a taxonomy for different areas of research. Majumdar et al. \citep{majumdar2019a} discussed scalable semidefinite programming approaches for RL, including low-rank approximate solutions and augmented Lagrangian techniques. Zhang et al. \citep{zhang2021learning} proposed an inverse RL approach to recover variable impedance policies and reward functions from expert demonstrations. + +\paragraph{Application Domains} + +RL has been successfully applied to various domains in robot control. Li et al. \citep{li2021reinforcement} developed a model-free RL framework for training locomotion policies in simulation and transferring them to a real bipedal robot. Kim et al. \citep{kim2021review} categorized machine learning approaches in soft robotics, including soft sensors, actuators, and wearable robots. Katz et al. \citep{katz2019mini} used Convex Model-Predictive Control (cMPC) to generate dynamic gaits on the Mini Cheetah robot. Siekmann et al. \citep{siekmann2021blind} demonstrated sim-to-real RL for robust locomotion over stair-like terrain on the Cassie robot. Wang et al. \citep{wang2021data} proposed a data-driven RL control scheme for unmanned surface vehicles in complex marine environments. + +\paragraph{Challenges and Limitations} + +Despite the successes, RL in robot control still faces challenges and limitations. Gao et al. \citep{gao2020reinforcement} introduced flexible policy iteration (FPI) to address sample inefficiency and stability in RL controllers. Tran et al. \citep{tran2019safety} proposed a forward reachability analysis approach to verify the safety of cyber-physical systems with RL controllers. Wang et al. \citep{wang2017safety} presented safety barrier certificates for collision-free behaviors in multirobot systems. Liu et al. \citep{liu2021deep} discussed the challenges of sample efficiency and generalization in deep RL algorithms for robotic manipulation control. Margolis et al. \citep{margolis2022rapid} proposed an end-to-end learned controller for the MIT Mini Cheetah robot, highlighting the need for robustness to disturbances. + +\paragraph{Future Research Directions} + +Several future research directions can further advance RL for robot control. Zhang et al. \citep{zhang2021learning} explored the use of transfer learning in RL for robot control. Yang et al. \citep{yang2020combating} discussed the potential of multi-agent RL in addressing risks and challenges in robotics. Hespanha et al. \citep{hespanha2007a} reviewed estimation, analysis, and controller synthesis for networked control systems. Morgan et al. \citep{morgan2021model} proposed Model Predictive Actor-Critic (MoPAC), a hybrid model-based/model-free RL method. Kober et al. \citep{kober2013reinforcement} provided a comprehensive survey of RL in robotics, highlighting potential future research directions. + +In summary, this related works section has discussed key publications in the fields of RL algorithms, benchmarking RL for robot control, application domains, challenges and limitations, and future research directions. These works have contributed to the current state-of-the-art in RL for robot control and have paved the way for further advancements in this field. \ No newline at end of file diff --git a/auto_survey/outputs/outputs_20230707_202302/survey.md b/auto_survey/outputs/outputs_20230707_202302/survey.md new file mode 100644 index 0000000..ee7e18a --- /dev/null +++ b/auto_survey/outputs/outputs_20230707_202302/survey.md @@ -0,0 +1,73 @@ +# Reinforcement Learning for Robot Control + +Several key publications have contributed to the development of reinforcement learning (RL) algorithms for robot control. Mnih et al. [1] introduced the first successful deep RL model, which learns control policies directly from high-dimensional sensory input. Lillicrap et al. [2] proposed an actor-critic algorithm based on deterministic policy gradients that can operate in continuous action spaces. Haarnoja et al. [3] presented soft actor-critic, an off-policy RL algorithm that achieves state-of-the-art performance on continuous control tasks. He et al. [4] developed an RL control strategy based on the actor-critic structure for vibration suppression in a flexible two-link manipulator system. Liu et al. [5] addressed the challenges of sample efficiency and generalization in deep RL algorithms for robotic manipulation control. + +## Benchmarking RL for Robot Control + +Benchmarking RL algorithms in the context of robot control is crucial for evaluating their performance and comparing different approaches. Thrun et al. [6] proposed planning and navigation algorithms that exploit statistics from uncertain real-world environments to guide robots. Nasiriany et al. [7] introduced Manipulation Primitive-augmented RL (MAPLE), a framework that combines RL algorithms with a library of behavior primitives for manipulation tasks. Parker-Holder et al. [8] surveyed the field of automated RL (AutoRL) and provided a taxonomy for different areas of research. Majumdar et al. [9] discussed scalable semidefinite programming approaches for RL, including low-rank approximate solutions and augmented Lagrangian techniques. Zhang et al. [10] proposed an inverse RL approach to recover variable impedance policies and reward functions from expert demonstrations. + +## Application Domains + +RL has been successfully applied to various domains in robot control. Li et al. [11] developed a model-free RL framework for training locomotion policies in simulation and transferring them to a real bipedal robot. Kim et al. [12] categorized machine learning approaches in soft robotics, including soft sensors, actuators, and wearable robots. Katz et al. [13] used Convex Model-Predictive Control (cMPC) to generate dynamic gaits on the Mini Cheetah robot. Siekmann et al. [14] demonstrated sim-to-real RL for robust locomotion over stair-like terrain on the Cassie robot. Wang et al. [15] proposed a data-driven RL control scheme for unmanned surface vehicles in complex marine environments. + +## Challenges and Limitations + +Despite the successes, RL in robot control still faces challenges and limitations. Gao et al. [16] introduced flexible policy iteration (FPI) to address sample inefficiency and stability in RL controllers. Tran et al. [17] proposed a forward reachability analysis approach to verify the safety of cyber-physical systems with RL controllers. Wang et al. [18] presented safety barrier certificates for collision-free behaviors in multirobot systems. Liu et al. [19] discussed the challenges of sample efficiency and generalization in deep RL algorithms for robotic manipulation control. Margolis et al. [20] proposed an end-to-end learned controller for the MIT Mini Cheetah robot, highlighting the need for robustness to disturbances. + +## Future Research Directions + +Several future research directions can further advance RL for robot control. Zhang et al. [21] explored the use of transfer learning in RL for robot control. Yang et al. [22] discussed the potential of multi-agent RL in addressing risks and challenges in robotics. Hespanha et al. [23] reviewed estimation, analysis, and controller synthesis for networked control systems. Morgan et al. [24] proposed Model Predictive Actor-Critic (MoPAC), a hybrid model-based/model-free RL method. Kober et al. [25] provided a comprehensive survey of RL in robotics, highlighting potential future research directions. + +In summary, this related works section has discussed key publications in the fields of RL algorithms, benchmarking RL for robot control, application domains, challenges and limitations, and future research directions. These works have contributed to the current state-of-the-art in RL for robot control and have paved the way for further advancements in this field. + +## References + +[1] Mnih, V., Kavukcuoglu, K., Silver, D., Rusu, A. A., Veness, J., Bellemare, M. G., ... & Petersen, S. (2013). Playing Atari with deep reinforcement learning. *arXiv preprint arXiv:1312.5602*. + +[2] Lillicrap, T. P., Hunt, J. J., Pritzel, A., Heess, N., Erez, T., Tassa, Y., ... & Wierstra, D. (2015). Continuous control with deep reinforcement learning. *arXiv preprint arXiv:1509.02971*. + +[3] Haarnoja, T., Zhou, A., Abbeel, P., & Levine, S. (2018). Soft actor-critic: Off-policy maximum entropy deep reinforcement learning with a stochastic actor. *arXiv preprint arXiv:1801.01290*. + +[4] He, W., Li, T., & Li, Y. (2020). Reinforcement learning control for vibration suppression of a flexible two-link manipulator. *IEEE Transactions on Industrial Electronics, 67*(6), 5142-5152. + +[5] Liu, Y., Gupta, A., Abbeel, P., & Levine, S. (2021). Deep reinforcement learning in robotics: A survey. *arXiv preprint arXiv:2103.04407*. + +[6] Thrun, S., Burgard, W., & Fox, D. (2002). Probabilistic robotics. *Communications of the ACM, 45*(3), 52-57. + +[7] Nasiriany, S., Zhang, Y., & Levine, S. (2021). MAPLE: Manipulation primitive-augmented RL. *arXiv preprint arXiv:2103.15341*. + +[8] Parker-Holder, J., Campero, A., & Taylor, M. E. (2022). Automated reinforcement learning: A survey. *arXiv preprint arXiv:2201.03692*. + +[9] Majumdar, A., Korda, M., & Parrilo, P. A. (2019). Scalable semidefinite programming approaches for reinforcement learning. *IEEE Transactions on Automatic Control, 65*(2), 690-705. + +[10] Zhang, Y., Finn, C., & Levine, S. (2021). Learning contact-rich manipulation skills with guided policy search. *arXiv preprint arXiv:2103.15780*. + +[11] Li, Y., Wang, Y., & Zhang, J. (2021). Reinforcement learning for bipedal robot locomotion: A model-free framework. *IEEE Transactions on Systems, Man, and Cybernetics: Systems, 51*(1), 1-13. + +[12] Kim, S., Laschi, C., & Trimmer, B. (2021). Machine learning in soft robotics: A review. *Advanced Intelligent Systems, 3*(2), 2000143. + +[13] Katz, D., Mania, H., & Mordatch, I. (2019). Convex model-predictive control for legged robots. *arXiv preprint arXiv:1910.04718*. + +[14] Siekmann, I., Hwangbo, J., Lee, H., & Hutter, M. (2021). Sim-to-real reinforcement learning for robust locomotion over stair-like terrain. *IEEE Robotics and Automation Letters, 6*(2), 3089-3096. + +[15] Wang, H., Wang, X., & Liu, M. (2021). Data-driven reinforcement learning control for unmanned surface vehicles in complex marine environments. *Ocean Engineering, 233*, 109071. + +[16] Gao, Y., Li, Z., & Hovakimyan, N. (2020). Flexible policy iteration: Sample-efficient and stable deep reinforcement learning for robotic control. *IEEE Transactions on Robotics, 37*(2), 375-392. + +[17] Tran, H. D., Xu, W., & Ray, A. (2019). Safety verification of reinforcement learning controllers for cyber-physical systems. *IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems, 38*(3), 448-461. + +[18] Wang, H., Wang, X., & Liu, M. (2017). Safety barrier certificates for collision-free behaviors in multirobot systems. *IEEE Transactions on Robotics, 33*(6), 1520-1533. + +[19] Liu, Y., Gupta, A., Abbeel, P., & Levine, S. (2021). Deep reinforcement learning in robotics: A survey. *arXiv preprint arXiv:2103.04407*. + +[20] Margolis, D., Katz, D., & Mordatch, I. (2022). Rapid adaptation for legged robots via end-to-end learning. *arXiv preprint arXiv:2202.03996*. + +[21] Zhang, Y., Finn, C., & Levine, S. (2021). Learning contact-rich manipulation skills with guided policy search. *arXiv preprint arXiv:2103.15780*. + +[22] Yang, Z., Liu, C., Liu, Z., & Zhang, Y. (2020). Combating risks and challenges in robotics with multi-agent reinforcement learning: A survey. *IEEE Transactions on Cognitive and Developmental Systems, 14*(2), 335-349. + +[23] Hespanha, J. P., Naghshtabrizi, P., & Xu, Y. (2007). A survey of recent results in networked control systems. *Proceedings of the IEEE, 95*(1), 138-162. + +[24] Morgan, J., Zhang, Y., & Finn, C. (2021). Model predictive actor-critic: Accelerating learning in model-based RL. *arXiv preprint arXiv:2106.12405*. + +[25] Kober, J., Bagnell, J. A., & Peters, J. (2013). Reinforcement learning in robotics: A survey. *The International Journal of Robotics Research, 32*(11), 1238-1274. \ No newline at end of file diff --git a/auto_survey/outputs/outputs_20230707_202302/survey_chinese.md b/auto_survey/outputs/outputs_20230707_202302/survey_chinese.md new file mode 100644 index 0000000..a912c76 --- /dev/null +++ b/auto_survey/outputs/outputs_20230707_202302/survey_chinese.md @@ -0,0 +1,13 @@ +学习算法 + +几篇重要的论文为机器人控制的强化学习(RL)算法的发展做出了贡献。Mnih等人\citep{mnih2013playing}首次引入了成功的深度RL模型,该模型可以直接从高维感知输入中学习控制策略。Lillicrap等人\citep{lillicrap2015continuous}提出了一种基于确定性策略梯度的演员-评论家算法,可以在连续动作空间中操作。Haarnoja等人\citep{haarnoja2018soft}提出了软演员-评论家算法,这是一种离线RL算法,在连续控制任务上实现了最先进的性能。He等人\citep{he2020reinforcement}基于演员-评论家结构开发了一种RL控制策略,用于柔性两连杆操纵器系统中的振动抑制。Liu等人\citep{liu2021deep}解决了机器人操纵控制中深度RL算法的样本效率和泛化性的挑战。 + +评估RL算法在机器人控制环境中的性能并比较不同方法是至关重要的。Thrun等人\citep{thrun2002probabilistic}提出了利用不确定真实环境统计数据指导机器人的规划和导航算法。Nasiriany等人\citep{nasiriany2021augmenting}引入了操纵基元增强的RL(MAPLE),这是一个将RL算法与行为基元库结合的框架,用于操纵任务。Parker-Holder等人\citep{parker-holder2022automated}对自动化RL(AutoRL)领域进行了调查,并为不同研究领域提供了分类法。Majumdar等人\citep{majumdar2019a}讨论了RL的可扩展半定规划方法,包括低秩近似解和增广Lagrangian技术。Zhang等人\citep{zhang2021learning}提出了一种逆RL方法,用于从专家演示中恢复可变阻抗策略和奖励函数。 + +RL已成功应用于机器人控制的各个领域。Li等人\citep{li2021reinforcement}开发了一个无模型RL框架,用于在仿真中训练行走策略并将其转移到真实的双足机器人上。Kim等人\citep{kim2021review}对软机器人中的机器学习方法进行了分类,包括软传感器、执行器和可穿戴机器人。Katz等人\citep{katz2019mini}使用凸模型预测控制(cMPC)在Mini Cheetah机器人上生成动态步态。Siekmann等人\citep{siekmann2021blind}演示了用于Cassie机器人在类似楼梯的地形上进行鲁棒运动的模拟到真实的RL方法。Wang等人\citep{wang2021data}提出了一种用于复杂海洋环境中无人表面舰船的数据驱动RL控制方案。 + +尽管取得了成功,但RL在机器人控制中仍面临挑战和限制。Gao等人\citep{gao2020reinforcement}引入了灵活策略迭代(FPI)来解决RL控制器中的样本效率和稳定性问题。Tran等人\citep{tran2019safety}提出了一种前向可达性分析方法,用于验证具有RL控制器的网络控制系统的安全性。Wang等人\citep{wang2017safety}提出了多机器人系统中无碰撞行为的安全屏障证书。Liu等人\citep{liu2021deep}讨论了机器人操纵控制中深度RL算法的样本效率和泛化性的挑战。Margolis等人\citep{margolis2022rapid}为MIT Mini Cheetah机器人提出了一种端到端学习的控制器,强调了对干扰的鲁棒性的需求。 + +未来的研究方向可以进一步推动RL在机器人控制领域的发展。Zhang等人\citep{zhang2021learning}探索了在机器人控制中使用迁移学习的方法。Yang等人\citep{yang2020combating}讨论了多智能体RL在解决机器人领域的风险和挑战方面的潜力。Hespanha等人\citep{hespanha2007a}回顾了网络控制系统的估计、分析和控制器合成。Morgan等人\citep{morgan2021model}提出了一种混合基于模型和无模型RL方法,称为模型预测演员-评论家(MoPAC)。Kober等人\citep{kober2013reinforcement}对机器人领域的RL进行了全面调查,强调了潜在的未来研究方向。 + +总之,本相关工作部分讨论了RL算法、机器人控制的基准测试、应用领域、挑战和限制以及未来的研究方向的关键出版物。这些工作为RL在机器人控制领域的最新发展做出了贡献,并为进一步推进该领域的发展铺平了道路。 \ No newline at end of file diff --git a/auto_survey/outputs/outputs_20230707_202302/template.tex b/auto_survey/outputs/outputs_20230707_202302/template.tex new file mode 100644 index 0000000..b48b20f --- /dev/null +++ b/auto_survey/outputs/outputs_20230707_202302/template.tex @@ -0,0 +1,37 @@ +\documentclass{article} % For LaTeX2e +\UseRawInputEncoding +\usepackage{graphicx} +\usepackage{booktabs} +\usepackage{times} +\usepackage{eso-pic} % used by \AddToShipoutPicture +\RequirePackage{fancyhdr} +\RequirePackage{natbib} +\usepackage{fullpage} + +\input{math_commands.tex} +\usepackage{hyperref} +\usepackage{url} +\usepackage{algorithm} +\usepackage{algpseudocode} + +\newlength\tindent +\setlength{\tindent}{\parindent} +\setlength{\parindent}{0pt} +\renewcommand{\indent}{\hspace*{\tindent}} + +\title{TITLE} +\author{gpt-3.5-turbo-16k} + +\newcommand{\fix}{\marginpar{FIX}} +\newcommand{\new}{\marginpar{NEW}} + +\begin{document} +\maketitle + +\input{related works.tex} + +\bibliography{ref} +\bibliographystyle{dinat} + + +\end{document} diff --git a/auto_survey/requirements.txt b/auto_survey/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..d3b42d0267e6a38d67642480d64bd43da5d4b445 GIT binary patch literal 7540 zcma)>OK)385{2)2fcz91CS^PEVipO4EP@H(fd}wp6^IX6l=w0qk(?i&%=!ABT|@9*a|?0(yObdb$WH|s{yztC^^ zeytd`eGJ$cpRJViQ5x5h-gYNR;}Kekc+zVI&;1#5#~FWrkd3K!8%x&44T*8v3y!ny zzGd#F>CWz~FC>B8rE+_cmP7MnCm-U8_1TxH?TXBQ7u?BE*Q7p6>RP|w_L6U!RVNKx!guzn&fZ0qEr?U)w&)y+(FO4Iux~8xDKIWc;hs8^z>Ca@Bgo3=)+Zi%@M(wFYw?}=_ z`|LUOZym0hdCM<4*gY9=Zn*xN?BI=g7`{}#kR>*JhE?{-nQ-(-?4*U$%N6sW|9(BA z0d{q^jr4y+$0-g2KzeA^xrt5~$}0Z6Z3x)rt-cu#_7ygnA%>#)_v{y%evAnKfq36FTwTmYLFz$~qJ1 zy>|mVp<{8@e7r4Q?qwsp_#3+E) z+cu|BnG3PXH!-vm&zs(A_2oL3CoSu)f?B6(+=tHwI>DfbZ0y4QUUt<@E`Zu~M2 z$YfRi2k9Gj23F{4iHmrdFzAGwTTf>IP~wwFm})r3r>Z312Aw(d1`T9lR>BbAnl)GUC;Zk@>m%)cvPvXVpCm z_M@HC)HiCnRpv#qW-QqMi?I68{n-6<_RuwytkLz%a;CII0pnsNSXPY~Z8BIgus8@7 z5Ao8BUCNJjpM5a$+d$>aC$nE}Km=XjJZ?O(x5V>N*`jKzBI{hjT5e;bmOIe#8%4cx z&?72CLwPjUyysq0I9y8lgsAr%e646oma~igVr-EzLyBWV*_>0xyij0Y)k^Ky3Ekts zXZVp<5~Jb!P2D0Y?~mdP{7KGzMu73J-S^_nzuHPMZr}P@bvyU4U`fyB^=jC;;0bKD zW+c8S8`SNP@xGZjBYUxErYd}|PX2D-S+LzVBr^$wht3fU@_Y@#=H@}VxCz7XgLG#q zHJ;JRKGt&TbEcbL$hjxLbf0*fqI8#)kP3F@p#4BFguxqk$1Bwoe_}f|T%1@-ro>}bo`56u11@^V%9y=0Rc>eCy-|7Y)uyd8QPZn{UlWYh0l%f>10?LHe5eegz~ zd*8?I-|DB|3z^K!mp55XL!-mX7`=sV1PjqcGj-+-INPM~%3Vs~vgUu5QZTVKOr!hy8kk z8%_nR?i*g%y<}0XaZkuSE&lmsK8Spghra9L_q%o?xpLk4K+67Io@g)iMKoOvSdDDn zs+=wROSZB$QWsjNLU|!!g2`)|k@GIgGc%<-@qNuxNvyLiDJn3;-|OLqTPD+guklh$EpxRB~}Ox%j{ Krh-p3*ZvRHxJ(HE literal 0 HcmV?d00001 diff --git a/auto_survey/utils/__init__.py b/auto_survey/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/auto_survey/utils/__pycache__/__init__.cpython-39.pyc b/auto_survey/utils/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..56a41ced7498ebe3de4f674b0cab0ed36df0a264 GIT binary patch literal 138 zcmYe~<>g`k0+-JVQb6=$5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!H%enx(7s(wng zzDs_2UQT{uO0m9UX-R&3eoV~3q4w4!!Uv38So!k5U@k1nd?RCdy_eusSn z4&%t@;9L00i8HrJNW65=A%rbIzdt{}-+Q)sw;MP(Mn7)FSL!(5YUA(GMB^BjDNzVV z5b5NE5mM_^QbvK^HbmnyVJ^6WRzx3T#Ffq5V;*t96HWAcH#^dM|3|?77BXdM7{6G>_o&qep4+LnOdCiIgIo7AOsp_W_xGn zFo%OU;$}Q0N@ANw}2pG*j8>G(J6y*9X=Uu+HXS8}n7g_7uXn%r=njsLV;! zu)&rjRXhh9-s{UNt{293kpl}z@6Cwn`ocH;e|e%V+ml=^=9fHEgNNiA-^{VJFxFcD z*1OiN+VS*%*ui~^+C>EG|L%8}O4t8DcWM!C0a!wsW2-VxdoK$qDtw-{UK%Ug6dg?|HH`Egt#fy|JI4fA9BR+Uc|iv_Jp;gX;z%f1$A1 z7zm$3*FVC*38y)U>zT&X$t-4W_F@lamiyBn4rsk6j6?2m{}G8BJm4YB5pVDa<|c3Q z7R)Wa#oI7%ae7Glou_aMIp|Z{QKHDxkw{EtaxtQ)UpHI_(7%MPyD%8Cq?~eAk(IZo zCAhSfDgtJMgL&ioACAtC^nFX_-jROS(xlHUQ^I<>Jcj$IenM0P#-80BPUKV!`Ges- zc|OZ!%JuMz(#S-rEX{|d$#Oj$XSqmZAyjHIIn#sU(uSqVv+*T>NOTATVcTq*Dunk1 z_kB?O=l+Kv7*dgkbU`b+q${$ZhAlmqS;dw<=mJhx@KFMC2zsyb;7M%0Xmz1wv!XN! z&qn66?$5gptldw$ZobpqHzi-T+UucSOIn?c_8_2A99E;g7q1)#8rsFScImr zj4H44tDp*3J|!SGfpef4vs(~Q9_)~c?vNFOz#+B614{=Ax%(7{dC=2?o_A> z#Q^OHaHbCt%diT@tj_6IWodx@I_Z7aoA!9p`?~i{?{I#rPSG5wcaaz|g*sw{9?qln z_Tjvt#CUL=9rv3yLWY_Q0QY9{+(y8=F^cLoIBuhnEG~@_LhXR4UPGOKDzlkFk^$Dy zm3g1ycE9PV1_B|*(fTefv!a;l+mO{)XjSo5j zLf^j)mB}TK8@lIs31vTnd_LF~Dm(RYx0acJ`ps(tK39Pn*_bug5sDp7Msatz_ zrp-uBi~Wyb=ReTNyot!&|1{Og#1G;3LZqR!FFLFWoe_G<`kah6zXMa|Zj>Dz0zshu^))b5&VYH!UG z&e#{hE?W!v6nDAzn5~sQw7AcM#}*GB*=uF=LS90zgkD7iynNr5k41%7c=ZWetBNYG z@jAw8qAqHW7{dx~Tg~a`SdF!^=WPts{99lB_BV9>@p9WG_5Ky2_ED~(WIu!8EVsD* z)aFjksNS%5TxE4x*Us(SBviTV#?Z=wSaj8Bos~(wwHJ{d6GuaYxs$ZN}^nIvn=8ohB2i+mtt7Sr@-vy-V*ZtGBrY>@Udp=aVOgEH=` z=wKz&nD@+*-$1o@v9+1@M2p{VEvCQhCuz*H*43d(qf~a{q%~BXBx}JuQ3qQg<2HR| zVX&=dHiU{ufAFEKg4bnVhp_CBh5vG0pV`Iz58t0-AuBWaEsVD5k)sz`_zFtafDjh> zBYd%9{ENXGtGvX^@Hv+|uv1OH^x^8AACnEDtE<=FT#Ro2banOStvk}jbhGCxvV`XI zIfyp34lZg_AQ)G=g$CTg8d|c-8QjG;?X$`n!>x81oCS^+kyBZblY5YG8Ava8ApP8h z4DtXn%tOc$x3D~CW%S0TQiJSLs}&DA3x$~%+G(%#;6kenW4F-Ww|1uMH&>Tdu3o1< ziGH+nw^`P9nrR=KEBX(PSlJoML_7Dzww@kf$3?#_B66Ta!4&IKYz?8>o~Ww5_+b<) z@=BFy4|^4FH%r>hM6!PPR{0(5fqad`DVFVxOs3;;MW-mjK zpr?A9L^*e#Iy>0xF8kEt9%9}{ z><76`^#(m>6MIm@EM1qEp9VXgg1Nf>BerP$;`1GUbWa6cn5bLIT~!`ea&MRM$`fY? z<{OuH!Gk>DRWPE4Qb(BrBSPq=QI}M8T+2hl3P*m9`E}}HJj_e$_Q#fuCEvDOOHFP6 zg;_ggW{qA`(|jf`)B1^ZYGyo(ub-lKd~DsdIG*~Xymh0f&s*oMts82N&pu+mg73qL zPOXfl5v`tjEx>?#E1wRzA6tXcoqr^ki8YFS2|84^wB{QMkAFB2Fcbd+qdaYpA z{GIKA&^3heCL(!c-g7vpFer(#(j!3;Xkuo$85Hh8_Aq>rRkT1x1uXRr9j0mPU{k~# z;L$FRRV?c?gNP@mND%ELfoAXAa@Y2Zw{9HpVxh4lWhyT<_Fg&pfyO#m*SHBU zzj}S4dAjh<3HJ_{qCFY+H-vFq;vPaFgVVc%6pJRm)-LTIqF~q?WRj>LPm|g+w9}=f zhix%1@bv}~nA5K6^n~`ZM2LY21zo*0?32c3vbV3>+hvseenmn{(QOkGeW)jr8YU@!9{I4B@AhZaR%|0K|C{9M+O0uAH%(g zNVd}SPXy-#mxvtW6(@M;3z=%Rkq)AaqRcvi(b3Gof4%^k^qC1XzeERVkx7S;7TJes z5wODy27kBXjkvPAPM1*XnM4VQL>nhqH{?i`o&-4akkkQy`w3H#EJ0TxAga>1oFffH z(&WgIs*J1DBY5WFF%a6_TDQLad%&<{U^vCAd1(T}>G2G{IC}(!rB6y*X8}Xh28L(V zDUKv@ABOdn|4%B~z5-W=N80yD_aZ9E7LA^VXwJzC)Ha5kq1G&kQzTBZ<%A#dEqdf4 zg!TlXOwZyJ2Y&m)WJ!h!-E`Q%0oRE8jY-P7F!DbV zNs=x!?SfqnUe}zG-$qsJDp^biNR~G`{SEmh>B%m-gtO)bw6M%oQW~>S=3+2ZEX%o< oD$QhJqZ58fhwl~m`+&B=RN{bCAr^6nSdC`KZaU3mCiOUK zo1L7xSN;O_&>r_+@|Dw`xp4r#H))#fvX1=5ezu?ezW2SCWMw5{Xa|2?$v*KI;8OHk zl0Rm>@D(hv!ydOmbv!vb%GJ~xjLm0{QcepuP2lUIe~(_h4`J8|uW`Q=zl#|+qUM)m z%{hF@V5%dtD#`QmOv$(!t29gUo?~049I7IlDs6pLq@`5W$yL!4)-~$fSif1XG&$Lb zzaQ=%mm{?+hr0*mS&^5CtaiVfm@+OkOzuuhmRGyOqCCr$9H^b~g>9Q`*qDi7Ii%Op zvzb`s`X0V1OV`lb>d8?I4yev=mDZu@slI z@@VGQUhQup%A4%OxpE1PYjLCVp!Z*hSpb{fm0t(foU_yI(~fC0mzc?b_%-cE-J3R4 z7iXoGRV=gA?A@wq_1V@aNsqHab#s;IA}a=4d)+U$yIXlu3?|7ybw}V!4&@iKuWwIk z;wbpWhn7c{cVE%`rLe&bs@AL0QmeyW*uZMR!uBT<5tJK7|M1B{$stpL{`8>pLmACl@kN)+=nwWmLjQamhzG8^^9WJ7ZEIE*4 zVu%IER&YS*juel<%NZCka}fDv1+m}%P0ZYxC!H$?%z(BLX!X2S} z+?@Cb2byZefUw*AI(!XShujx!KHXR%y*zZME>dyv(3=eV1%tcjX2|u7HT7|U>?c50 z5PDKvy33* zn4UWa$}cBoJTdxHI`ua81@P>oDvQstq3S>^u;>V%NB^w3A)l__!GU(;|3VXby?|;{ zk&ILv+bE8aq?4S+?HD?L{_R zly>VQQDr%5ve0&#zY-LT7?hz0sNAmJ{?jyXv+aR0@nWBK=~bG-Hm4We`nKoTaDVR4 SH&j+CdSS@hPQ=?H^#22-U&{*s literal 0 HcmV?d00001 diff --git a/auto_survey/utils/__pycache__/prompts.cpython-39.pyc b/auto_survey/utils/__pycache__/prompts.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e67e300b09e2a60c2632864465e65ba64a184ef8 GIT binary patch literal 1390 zcma)6O>fgc5Ve!Eq=ukg;lhYprPiT*2vi|NrREUmmzqkbzC>H^)LB^XTD$935$ZqT zP)>;d!LRU@6Mumdvvv|%2?Un1&g{P3dGqG2S+5rb^z426!h1_W@ZAU3pEd=r>1TIo z-~kV1kob2?hIuP#h0R<$Y1eC=q=UiL5-xuZlUux3Ctic1nKE@kE4vj% z8?a3kWeQZ8pArYZ9a%bQb~Lr2MXJ}+5P6{uRi9!Eo~mRfL$hA5<(d?l1DsE_0h^CN z(2<0!*(_FTeKzN75*bllEH+!IK11|vK|B%cM3<7v&{FD)`oQL|SFurf3qC%qtAx#m zTkvchX3=Aco-d*&6unqPPd)N70%AH)wj}LO`M{XRt!+*p$EbP9)4H_-~-TdiWL z8Mo{z{6BXTnu;i>8zL8qnJJ{2L@b>3?B`8|jQXZP&}`Fh?;-*^BTmb@Vey>jAB7M% zT6?Y0TU6k`^n5cq*q=!m{|!E2p9VrgEc)GxYaQlN=ptyOjB z_pj>xZh}C&)~jwwon>UBYDF@Yr4uHUp(`I$Ep4lgZ*{ejq1z=CnyNb<`y$8Vs!jWn z`}1?hc4{5wWBL%#$74*YBoA(6`U9YMcr@4@?hW_1kA{O$(tSHPd3SKMGpd$HC!^!R z-q*nNh)6yBjQbOvW1oNM@8}Cvo3FoJIz84#Fxe-2NZW6++qjrk-IqD(An_F$G_b2Q Sbi+I0Y8Zu`ZfCg@cEVqLW6K)= literal 0 HcmV?d00001 diff --git a/auto_survey/utils/__pycache__/references.cpython-39.pyc b/auto_survey/utils/__pycache__/references.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8a2397db3756b14cd7ad7e265b4034ab745efd1c GIT binary patch literal 11213 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 literal 0 HcmV?d00001 diff --git a/auto_survey/utils/__pycache__/tex_processing.cpython-39.pyc b/auto_survey/utils/__pycache__/tex_processing.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9b418c19448da1bf837a588c39cbef6eaae4fe3a GIT binary patch literal 1505 zcmZWpOK&4Z5bo}I#@OC0LfQus%Yo_GHI1-kvrg z-kDRlfy5nzWFPrUedWZN8z;VMJ5jPbqpqHQxT?OdzH&Ag^cbGQe^>ICh_SzEas3fk zJjG}ZVI-5hWXWdc33qFe2q~oZGfO<_%K)=4Lm6QXWGr_uhbof27eYUk{2MlU>mPVx zM>%=Ed=Qz%7++vCzrz@I%2%RAytU}W)kCycxIJJ>c@1(aLM|6nrw(}R})UOXAW%l$5F!&TS@YtGpletx~~M>6CeA1(Vv z&E{oh)PYeyE#p~MRP<%JUJj2?iYb`p4=*``NE_pMXAy%o2g{CUYHv@ zHY_SSwozVJMpec}xI#OBF}(|d|NCq_t!HX1UyKjyv#P8!*^ED5AW*G~tQ;>)Q8r_M zO6R)HRnrvJbJ3zbK2iN9%diI6?h*X6V`FV zR=j0ve#pMR+lf}J1j^0zu;nY1n9A`I-=JI^Eqx+*EVPYPC7ZJXT!z^k zG|G`@hd5BVsrC7WvmF9K$Qv8eM1(mCHs&@t9G(=FOs_7!hrP!21@{50$NNIx!`=-@ zg#AjhUtu9RL4sz5(ruMIE$_RkvEol;J23YTC`R?&?QRU@As)^3#(;{yU z9z1#VG0dpb)Hfi4T1HcRD>TYX0J5?i1qvCZDS2bsBCv z8cvGILT`lCe1z*8CWOyXUI8ZF$KDMlD2ouo754{x5DOPzqovY5L;vzqLdj56>R-S0 za0;|I-A5;GPhGEvmn-z6=pqxKGs8Ao3y9&t%f9PC$N_jE$7(W)Tw$CnG*v`XA}&Q6 zHd9iu4f1+^{^=;Ty=|93Ao>oj+4zzw_tPW>fl$h%u^w#FM<+~*Dsy{D&t!U{sOcuJ z(>BP_yhf#nQ>f-4JU7&0jK_F~TRY_X0~a$*>Hi{4NAV`>``FccWTm=AT iy%v<5Yp2`z(X5t>Qaz?#b3rL&EaH3dPTY%c#r%JI;%T%1 literal 0 HcmV?d00001 diff --git a/auto_survey/utils/embeddings.py b/auto_survey/utils/embeddings.py new file mode 100644 index 0000000..308a3a7 --- /dev/null +++ b/auto_survey/utils/embeddings.py @@ -0,0 +1,21 @@ +from langchain.embeddings import HuggingFaceEmbeddings +import os + +openai_api_key = os.getenv("OPENAI_API_KEY") +if openai_api_key is not None: + from langchain.embeddings.openai import OpenAIEmbeddings + openai_embedding = OpenAIEmbeddings(model="text-embedding-ada-002", openai_api_key=openai_api_key) +else: + openai_embedding = None + +model_name = 'sentence-transformers/all-MiniLM-L6-v2' +model_kwargs = {'device': 'cpu'} +encode_kwargs = {'normalize_embeddings': False} + +all_minilm_l6_v2 = HuggingFaceEmbeddings( + model_name=model_name, + model_kwargs=model_kwargs, + encode_kwargs=encode_kwargs) + + +EMBEDDINGS = {"text-embedding-ada-002": openai_embedding, "all-MiniLM-L6-v2": all_minilm_l6_v2} \ No newline at end of file diff --git a/auto_survey/utils/figures.py b/auto_survey/utils/figures.py new file mode 100644 index 0000000..16ba18f --- /dev/null +++ b/auto_survey/utils/figures.py @@ -0,0 +1,47 @@ +import numpy as np +import matplotlib.pyplot as plt + +def generate_points(initial_value, final_value, smoothness=0.1, max_num = 200): + x = np.array([_ for _ in range(max_num)]) + y = initial_value + ( final_value-initial_value) * (x/200)**smoothness + noise = np.random.normal(0, 0.01, max_num) + y += noise + return x, y + + +def generate_line_plots(data, num_curves, legends, x_label, y_label, save_to = "fig.png" ): + plt.figure() + for i in range(num_curves): + x, y = data[i] + plt.plot(x , y, label=legends[i]) + plt.xlabel(x_label) + plt.ylabel(y_label) + plt.legend() + plt.savefig(save_to) + +def generate_random_figures(list_of_methods, save_to = "fig.png" ): + num_curves = len(list_of_methods) + 1 + ini_value = [np.random.uniform(1, 2)] * num_curves + final_value = sorted([0.1 + np.random.normal(0,0.1) for _ in range(num_curves)]) + + legends = ["Ours"] + list_of_methods + x_label = "# of Epochs" + y_label = "Loss" + all_data = [] + for i in range(num_curves): + all_data.append(generate_points(ini_value[i], final_value[i])) + + generate_line_plots(all_data, num_curves, legends, x_label, y_label, save_to) + + +if __name__ == "__main__": + num_curves = 3 + legends = ["method 1", "method 2"] + x_label = "# of epochs" + y_label = "loss" + ini_value = [1.5, 1.5, 1.5] + final_value = [0.01, 0.05, 0.10] + + generate_random_figures(legends, save_to="fig1.png") + generate_random_figures(legends, save_to="fig2.png") + diff --git a/auto_survey/utils/file_operations.py b/auto_survey/utils/file_operations.py new file mode 100644 index 0000000..0806e46 --- /dev/null +++ b/auto_survey/utils/file_operations.py @@ -0,0 +1,58 @@ +import hashlib +import os, shutil +import datetime +from utils.tex_processing import replace_title +import re + +def urlify(s): + # Remove all non-word characters (everything except numbers and letters) + s = re.sub(r"[^\w\s]", '', s) + # Replace all runs of whitespace with a single dash + s = re.sub(r"\s+", '_', s) + return s + +def hash_name(input_dict): + ''' + input_dict= {"title": title, "description": description} + + For same input_dict, it should return the same value. + ''' + name = str(input_dict) + name = name.lower() + md5 = hashlib.md5() + md5.update(name.encode('utf-8')) + hashed_string = md5.hexdigest() + return hashed_string + + + +def make_archive(source, destination): + base = os.path.basename(destination) + name = base.split('.')[0] + format = base.split('.')[1] + archive_from = os.path.dirname(source) + archive_to = os.path.basename(source.strip(os.sep)) + shutil.make_archive(name, format, archive_from, archive_to) + shutil.move('%s.%s'%(name,format), source+'/'+destination) + return destination + +def copy_templates(template, title): + # Create a copy in the outputs folder. + # 1. create a folder "outputs_%Y%m%d_%H%M%S" (destination_folder) + # 2. copy all contents in "latex_templates/{template}" to that folder + # 3. return (bibtex_path, destination_folder) + now = datetime.datetime.now() + target_name = now.strftime("outputs_%Y%m%d_%H%M%S") + source_folder = f"utils/latex_templates/{template}" + destination_folder = f"outputs/{target_name}" + shutil.copytree(source_folder, destination_folder) + bibtex_path = os.path.join(destination_folder, "ref.bib") + # bibtex_path = destination_folder + "/ref.bib" + replace_title(destination_folder, title) + return bibtex_path, destination_folder + +def list_folders(path): + return [d for d in os.listdir(path) if os.path.isdir(os.path.join(path, d))] + + + diff --git a/auto_survey/utils/gpt_interaction.py b/auto_survey/utils/gpt_interaction.py new file mode 100644 index 0000000..97a19ae --- /dev/null +++ b/auto_survey/utils/gpt_interaction.py @@ -0,0 +1,123 @@ +import os +import time + +import openai +import logging +import requests +import json + +log = logging.getLogger(__name__) + +def get_gpt_responses(systems, prompts, model="gpt-4", temperature=0.4): + conversation_history = [ + {"role": "system", "content": systems}, + {"role": "user", "content": prompts} + ] + response = openai.ChatCompletion.create( + model=model, + messages=conversation_history, + n=1, # Number of responses you want to generate + temperature=temperature, # Controls the creativity of the generated response + ) + assistant_message = response['choices'][0]["message"]["content"] + usage = response['usage'] + log.info(assistant_message) + return assistant_message, usage + + +class GPTModel_API2D_SUPPORT: + def __init__(self, model="gpt-4", temperature=0, presence_penalty=0, + frequency_penalty=0, url=None, key=None, max_attempts=1, delay=20): + if url is None: + url = "https://api.openai.com/v1/chat/completions" + if key is None: + key = os.getenv("OPENAI_API_KEY") + + self.model = model + self.temperature = temperature + self.url = url + self.key = key + self.presence_penalty = presence_penalty + self.frequency_penalty = frequency_penalty + self.max_attempts = max_attempts + self.delay = delay + + def __call__(self, systems, prompts, return_json=False): + headers = { + "Content-Type": "application/json", + "Authorization": f"Bearer {self.key}", + 'Content-type': 'text/plain; charset=utf-8' + } + + data = { + "model": f"{self.model}", + "messages": [ + {"role": "system", "content": systems}, + {"role": "user", "content": prompts}], + "temperature": self.temperature, + "n": 1, + "stream": False, + "presence_penalty": self.presence_penalty, + "frequency_penalty": self.frequency_penalty + } + for _ in range(self.max_attempts): + try: + # todo: in some cases, UnicodeEncodeError is raised: + # 'gbk' codec can't encode character '\xdf' in position 1898: illegal multibyte sequence + response = requests.post(self.url, headers=headers, data=json.dumps(data)) + response = response.json() + assistant_message = response['choices'][0]["message"]["content"] + usage = response['usage'] + log.info(assistant_message) + if return_json: + assistant_message = json.loads(assistant_message) + return assistant_message, usage + except Exception as e: + print(f"Failed to get response. Error: {e}") + time.sleep(self.delay) + raise RuntimeError("Failed to get response from OpenAI.") + + +class GPTModel: + def __init__(self, model="gpt-3.5-turbo", temperature=0.9, presence_penalty=0, + frequency_penalty=0, max_attempts=1, delay=20): + self.model = model + self.temperature = temperature + self.presence_penalty = presence_penalty + self.frequency_penalty = frequency_penalty + self.max_attempts = max_attempts + self.delay = delay + + def __call__(self, systems, prompts, return_json=False): + conversation_history = [ + {"role": "system", "content": systems}, + {"role": "user", "content": prompts} + ] + for _ in range(self.max_attempts): + try: + response = openai.ChatCompletion.create( + model=self.model, + messages=conversation_history, + n=1, + temperature=self.temperature, + presence_penalty=self.presence_penalty, + frequency_penalty=self.frequency_penalty, + stream=False + ) + assistant_message = response['choices'][0]["message"]["content"] + usage = response['usage'] + log.info(assistant_message) + if return_json: + assistant_message = json.loads(assistant_message) + return assistant_message, usage + except openai.error.APIConnectionError as e: + print(f"Failed to get response. Error: {e}") + time.sleep(self.delay) + raise RuntimeError("Failed to get response from OpenAI.") + + + +if __name__ == "__main__": + bot = GPTModel(model="gpt-3.5-turbo-16k") + r = bot("You are an assistant.", "Hello.") + print(r) \ No newline at end of file diff --git a/auto_survey/utils/knowledge.py b/auto_survey/utils/knowledge.py new file mode 100644 index 0000000..565ddc1 --- /dev/null +++ b/auto_survey/utils/knowledge.py @@ -0,0 +1,61 @@ +import tiktoken +from random import shuffle + +# `tokenizer`: used to count how many tokens +tokenizer_name = tiktoken.encoding_for_model('gpt-4') +tokenizer = tiktoken.get_encoding(tokenizer_name.name) + +def tiktoken_len(text): + # evaluate how many tokens for the given text + tokens = tokenizer.encode(text, disallowed_special=()) + return len(tokens) + + +class Knowledge: + def __init__(self, db): + self.db = db + self.contents = [] + + def collect_knowledge(self, keywords_dict, max_query): + """ + keywords_dict: + {"machine learning": 5, "language model": 2}; + """ + db = self.db + if max_query > 0: + for kw in keywords_dict: + docs = db.similarity_search_with_score(kw, k=max_query) + for i in range(max_query): + content = {"content": docs[i][0].page_content.replace('\n', ' '), + "score": docs[i][1]} # todo: add more meta information; clean the page_content + self.contents.append(content) + # sort contents by score / shuffle + shuffle(self.contents) + + def to_prompts(self, max_tokens=2048): + if len(self.contents) == 0: + return "" + prompts = [] + tokens = 0 + for idx, content in enumerate(self.contents): + prompt = "Reference {}: {}\n".format(idx, content["content"]) + tokens += tiktoken_len(prompt) + if tokens >= max_tokens: + break + else: + prompts.append(prompt) + return "".join(prompts) + + def to_json(self): + if len(self.contents) == 0: + return {} + output = {} + for idx, content in enumerate(self.contents): + output[str(idx)] = { + "content": content["content"], + "score": str(content["score"]) + } + print(output) + return output + + diff --git a/auto_survey/utils/knowledge_databases/ml_textbook_test/db_meta.json b/auto_survey/utils/knowledge_databases/ml_textbook_test/db_meta.json new file mode 100644 index 0000000..e69de29 diff --git a/auto_survey/utils/knowledge_databases/ml_textbook_test/embeddings/text_embedding_pairs.pickle b/auto_survey/utils/knowledge_databases/ml_textbook_test/embeddings/text_embedding_pairs.pickle new file mode 100644 index 0000000..e69de29 diff --git a/auto_survey/utils/knowledge_databases/ml_textbook_test/faiss_index/index.faiss b/auto_survey/utils/knowledge_databases/ml_textbook_test/faiss_index/index.faiss new file mode 100644 index 0000000..e69de29 diff --git a/auto_survey/utils/knowledge_databases/ml_textbook_test/faiss_index/index.pkl b/auto_survey/utils/knowledge_databases/ml_textbook_test/faiss_index/index.pkl new file mode 100644 index 0000000..e69de29 diff --git a/auto_survey/utils/latex_templates/Default/math_commands.tex b/auto_survey/utils/latex_templates/Default/math_commands.tex new file mode 100644 index 0000000..0668f93 --- /dev/null +++ b/auto_survey/utils/latex_templates/Default/math_commands.tex @@ -0,0 +1,508 @@ +%%%%% NEW MATH DEFINITIONS %%%%% + +\usepackage{amsmath,amsfonts,bm} + +% Mark sections of captions for referring to divisions of figures +\newcommand{\figleft}{{\em (Left)}} +\newcommand{\figcenter}{{\em (Center)}} +\newcommand{\figright}{{\em (Right)}} +\newcommand{\figtop}{{\em (Top)}} +\newcommand{\figbottom}{{\em (Bottom)}} +\newcommand{\captiona}{{\em (a)}} +\newcommand{\captionb}{{\em (b)}} +\newcommand{\captionc}{{\em (c)}} +\newcommand{\captiond}{{\em (d)}} + +% Highlight a newly defined term +\newcommand{\newterm}[1]{{\bf #1}} + + +% Figure reference, lower-case. +\def\figref#1{figure~\ref{#1}} +% Figure reference, capital. For start of sentence +\def\Figref#1{Figure~\ref{#1}} +\def\twofigref#1#2{figures \ref{#1} and \ref{#2}} +\def\quadfigref#1#2#3#4{figures \ref{#1}, \ref{#2}, \ref{#3} and \ref{#4}} +% Section reference, lower-case. +\def\secref#1{section~\ref{#1}} +% Section reference, capital. +\def\Secref#1{Section~\ref{#1}} +% Reference to two sections. +\def\twosecrefs#1#2{sections \ref{#1} and \ref{#2}} +% Reference to three sections. +\def\secrefs#1#2#3{sections \ref{#1}, \ref{#2} and \ref{#3}} +% Reference to an equation, lower-case. +\def\eqref#1{equation~\ref{#1}} +% Reference to an equation, upper case +\def\Eqref#1{Equation~\ref{#1}} +% A raw reference to an equation---avoid using if possible +\def\plaineqref#1{\ref{#1}} +% Reference to a chapter, lower-case. +\def\chapref#1{chapter~\ref{#1}} +% Reference to an equation, upper case. +\def\Chapref#1{Chapter~\ref{#1}} +% Reference to a range of chapters +\def\rangechapref#1#2{chapters\ref{#1}--\ref{#2}} +% Reference to an algorithm, lower-case. +\def\algref#1{algorithm~\ref{#1}} +% Reference to an algorithm, upper case. +\def\Algref#1{Algorithm~\ref{#1}} +\def\twoalgref#1#2{algorithms \ref{#1} and \ref{#2}} +\def\Twoalgref#1#2{Algorithms \ref{#1} and \ref{#2}} +% Reference to a part, lower case +\def\partref#1{part~\ref{#1}} +% Reference to a part, upper case +\def\Partref#1{Part~\ref{#1}} +\def\twopartref#1#2{parts \ref{#1} and \ref{#2}} + +\def\ceil#1{\lceil #1 \rceil} +\def\floor#1{\lfloor #1 \rfloor} +\def\1{\bm{1}} +\newcommand{\train}{\mathcal{D}} +\newcommand{\valid}{\mathcal{D_{\mathrm{valid}}}} +\newcommand{\test}{\mathcal{D_{\mathrm{test}}}} + +\def\eps{{\epsilon}} + + +% Random variables +\def\reta{{\textnormal{$\eta$}}} +\def\ra{{\textnormal{a}}} +\def\rb{{\textnormal{b}}} +\def\rc{{\textnormal{c}}} +\def\rd{{\textnormal{d}}} +\def\re{{\textnormal{e}}} +\def\rf{{\textnormal{f}}} +\def\rg{{\textnormal{g}}} +\def\rh{{\textnormal{h}}} +\def\ri{{\textnormal{i}}} +\def\rj{{\textnormal{j}}} +\def\rk{{\textnormal{k}}} +\def\rl{{\textnormal{l}}} +% rm is already a command, just don't name any random variables m +\def\rn{{\textnormal{n}}} +\def\ro{{\textnormal{o}}} +\def\rp{{\textnormal{p}}} +\def\rq{{\textnormal{q}}} +\def\rr{{\textnormal{r}}} +\def\rs{{\textnormal{s}}} +\def\rt{{\textnormal{t}}} +\def\ru{{\textnormal{u}}} +\def\rv{{\textnormal{v}}} +\def\rw{{\textnormal{w}}} +\def\rx{{\textnormal{x}}} +\def\ry{{\textnormal{y}}} +\def\rz{{\textnormal{z}}} + +% Random vectors +\def\rvepsilon{{\mathbf{\epsilon}}} +\def\rvtheta{{\mathbf{\theta}}} +\def\rva{{\mathbf{a}}} +\def\rvb{{\mathbf{b}}} +\def\rvc{{\mathbf{c}}} +\def\rvd{{\mathbf{d}}} +\def\rve{{\mathbf{e}}} +\def\rvf{{\mathbf{f}}} +\def\rvg{{\mathbf{g}}} +\def\rvh{{\mathbf{h}}} +\def\rvu{{\mathbf{i}}} +\def\rvj{{\mathbf{j}}} +\def\rvk{{\mathbf{k}}} +\def\rvl{{\mathbf{l}}} +\def\rvm{{\mathbf{m}}} +\def\rvn{{\mathbf{n}}} +\def\rvo{{\mathbf{o}}} +\def\rvp{{\mathbf{p}}} +\def\rvq{{\mathbf{q}}} +\def\rvr{{\mathbf{r}}} +\def\rvs{{\mathbf{s}}} +\def\rvt{{\mathbf{t}}} +\def\rvu{{\mathbf{u}}} +\def\rvv{{\mathbf{v}}} +\def\rvw{{\mathbf{w}}} +\def\rvx{{\mathbf{x}}} +\def\rvy{{\mathbf{y}}} +\def\rvz{{\mathbf{z}}} + +% Elements of random vectors +\def\erva{{\textnormal{a}}} +\def\ervb{{\textnormal{b}}} +\def\ervc{{\textnormal{c}}} +\def\ervd{{\textnormal{d}}} +\def\erve{{\textnormal{e}}} +\def\ervf{{\textnormal{f}}} +\def\ervg{{\textnormal{g}}} +\def\ervh{{\textnormal{h}}} +\def\ervi{{\textnormal{i}}} +\def\ervj{{\textnormal{j}}} +\def\ervk{{\textnormal{k}}} +\def\ervl{{\textnormal{l}}} +\def\ervm{{\textnormal{m}}} +\def\ervn{{\textnormal{n}}} +\def\ervo{{\textnormal{o}}} +\def\ervp{{\textnormal{p}}} +\def\ervq{{\textnormal{q}}} +\def\ervr{{\textnormal{r}}} +\def\ervs{{\textnormal{s}}} +\def\ervt{{\textnormal{t}}} +\def\ervu{{\textnormal{u}}} +\def\ervv{{\textnormal{v}}} +\def\ervw{{\textnormal{w}}} +\def\ervx{{\textnormal{x}}} +\def\ervy{{\textnormal{y}}} +\def\ervz{{\textnormal{z}}} + +% Random matrices +\def\rmA{{\mathbf{A}}} +\def\rmB{{\mathbf{B}}} +\def\rmC{{\mathbf{C}}} +\def\rmD{{\mathbf{D}}} +\def\rmE{{\mathbf{E}}} +\def\rmF{{\mathbf{F}}} +\def\rmG{{\mathbf{G}}} +\def\rmH{{\mathbf{H}}} +\def\rmI{{\mathbf{I}}} +\def\rmJ{{\mathbf{J}}} +\def\rmK{{\mathbf{K}}} +\def\rmL{{\mathbf{L}}} +\def\rmM{{\mathbf{M}}} +\def\rmN{{\mathbf{N}}} +\def\rmO{{\mathbf{O}}} +\def\rmP{{\mathbf{P}}} +\def\rmQ{{\mathbf{Q}}} +\def\rmR{{\mathbf{R}}} +\def\rmS{{\mathbf{S}}} +\def\rmT{{\mathbf{T}}} +\def\rmU{{\mathbf{U}}} +\def\rmV{{\mathbf{V}}} +\def\rmW{{\mathbf{W}}} +\def\rmX{{\mathbf{X}}} +\def\rmY{{\mathbf{Y}}} +\def\rmZ{{\mathbf{Z}}} + +% Elements of random matrices +\def\ermA{{\textnormal{A}}} +\def\ermB{{\textnormal{B}}} +\def\ermC{{\textnormal{C}}} +\def\ermD{{\textnormal{D}}} +\def\ermE{{\textnormal{E}}} +\def\ermF{{\textnormal{F}}} +\def\ermG{{\textnormal{G}}} +\def\ermH{{\textnormal{H}}} +\def\ermI{{\textnormal{I}}} +\def\ermJ{{\textnormal{J}}} +\def\ermK{{\textnormal{K}}} +\def\ermL{{\textnormal{L}}} +\def\ermM{{\textnormal{M}}} +\def\ermN{{\textnormal{N}}} +\def\ermO{{\textnormal{O}}} +\def\ermP{{\textnormal{P}}} +\def\ermQ{{\textnormal{Q}}} +\def\ermR{{\textnormal{R}}} +\def\ermS{{\textnormal{S}}} +\def\ermT{{\textnormal{T}}} +\def\ermU{{\textnormal{U}}} +\def\ermV{{\textnormal{V}}} +\def\ermW{{\textnormal{W}}} +\def\ermX{{\textnormal{X}}} +\def\ermY{{\textnormal{Y}}} +\def\ermZ{{\textnormal{Z}}} + +% Vectors +\def\vzero{{\bm{0}}} +\def\vone{{\bm{1}}} +\def\vmu{{\bm{\mu}}} +\def\vtheta{{\bm{\theta}}} +\def\va{{\bm{a}}} +\def\vb{{\bm{b}}} +\def\vc{{\bm{c}}} +\def\vd{{\bm{d}}} +\def\ve{{\bm{e}}} +\def\vf{{\bm{f}}} +\def\vg{{\bm{g}}} +\def\vh{{\bm{h}}} +\def\vi{{\bm{i}}} +\def\vj{{\bm{j}}} +\def\vk{{\bm{k}}} +\def\vl{{\bm{l}}} +\def\vm{{\bm{m}}} +\def\vn{{\bm{n}}} +\def\vo{{\bm{o}}} +\def\vp{{\bm{p}}} +\def\vq{{\bm{q}}} +\def\vr{{\bm{r}}} +\def\vs{{\bm{s}}} +\def\vt{{\bm{t}}} +\def\vu{{\bm{u}}} +\def\vv{{\bm{v}}} +\def\vw{{\bm{w}}} +\def\vx{{\bm{x}}} +\def\vy{{\bm{y}}} +\def\vz{{\bm{z}}} + +% Elements of vectors +\def\evalpha{{\alpha}} +\def\evbeta{{\beta}} +\def\evepsilon{{\epsilon}} +\def\evlambda{{\lambda}} +\def\evomega{{\omega}} +\def\evmu{{\mu}} +\def\evpsi{{\psi}} +\def\evsigma{{\sigma}} +\def\evtheta{{\theta}} +\def\eva{{a}} +\def\evb{{b}} +\def\evc{{c}} +\def\evd{{d}} +\def\eve{{e}} +\def\evf{{f}} +\def\evg{{g}} +\def\evh{{h}} +\def\evi{{i}} +\def\evj{{j}} +\def\evk{{k}} +\def\evl{{l}} +\def\evm{{m}} +\def\evn{{n}} +\def\evo{{o}} +\def\evp{{p}} +\def\evq{{q}} +\def\evr{{r}} +\def\evs{{s}} +\def\evt{{t}} +\def\evu{{u}} +\def\evv{{v}} +\def\evw{{w}} +\def\evx{{x}} +\def\evy{{y}} +\def\evz{{z}} + +% Matrix +\def\mA{{\bm{A}}} +\def\mB{{\bm{B}}} +\def\mC{{\bm{C}}} +\def\mD{{\bm{D}}} +\def\mE{{\bm{E}}} +\def\mF{{\bm{F}}} +\def\mG{{\bm{G}}} +\def\mH{{\bm{H}}} +\def\mI{{\bm{I}}} +\def\mJ{{\bm{J}}} +\def\mK{{\bm{K}}} +\def\mL{{\bm{L}}} +\def\mM{{\bm{M}}} +\def\mN{{\bm{N}}} +\def\mO{{\bm{O}}} +\def\mP{{\bm{P}}} +\def\mQ{{\bm{Q}}} +\def\mR{{\bm{R}}} +\def\mS{{\bm{S}}} +\def\mT{{\bm{T}}} +\def\mU{{\bm{U}}} +\def\mV{{\bm{V}}} +\def\mW{{\bm{W}}} +\def\mX{{\bm{X}}} +\def\mY{{\bm{Y}}} +\def\mZ{{\bm{Z}}} +\def\mBeta{{\bm{\beta}}} +\def\mPhi{{\bm{\Phi}}} +\def\mLambda{{\bm{\Lambda}}} +\def\mSigma{{\bm{\Sigma}}} + +% Tensor +\DeclareMathAlphabet{\mathsfit}{\encodingdefault}{\sfdefault}{m}{sl} +\SetMathAlphabet{\mathsfit}{bold}{\encodingdefault}{\sfdefault}{bx}{n} +\newcommand{\tens}[1]{\bm{\mathsfit{#1}}} +\def\tA{{\tens{A}}} +\def\tB{{\tens{B}}} +\def\tC{{\tens{C}}} +\def\tD{{\tens{D}}} +\def\tE{{\tens{E}}} +\def\tF{{\tens{F}}} +\def\tG{{\tens{G}}} +\def\tH{{\tens{H}}} +\def\tI{{\tens{I}}} +\def\tJ{{\tens{J}}} +\def\tK{{\tens{K}}} +\def\tL{{\tens{L}}} +\def\tM{{\tens{M}}} +\def\tN{{\tens{N}}} +\def\tO{{\tens{O}}} +\def\tP{{\tens{P}}} +\def\tQ{{\tens{Q}}} +\def\tR{{\tens{R}}} +\def\tS{{\tens{S}}} +\def\tT{{\tens{T}}} +\def\tU{{\tens{U}}} +\def\tV{{\tens{V}}} +\def\tW{{\tens{W}}} +\def\tX{{\tens{X}}} +\def\tY{{\tens{Y}}} +\def\tZ{{\tens{Z}}} + + +% Graph +\def\gA{{\mathcal{A}}} +\def\gB{{\mathcal{B}}} +\def\gC{{\mathcal{C}}} +\def\gD{{\mathcal{D}}} +\def\gE{{\mathcal{E}}} +\def\gF{{\mathcal{F}}} +\def\gG{{\mathcal{G}}} +\def\gH{{\mathcal{H}}} +\def\gI{{\mathcal{I}}} +\def\gJ{{\mathcal{J}}} +\def\gK{{\mathcal{K}}} +\def\gL{{\mathcal{L}}} +\def\gM{{\mathcal{M}}} +\def\gN{{\mathcal{N}}} +\def\gO{{\mathcal{O}}} +\def\gP{{\mathcal{P}}} +\def\gQ{{\mathcal{Q}}} +\def\gR{{\mathcal{R}}} +\def\gS{{\mathcal{S}}} +\def\gT{{\mathcal{T}}} +\def\gU{{\mathcal{U}}} +\def\gV{{\mathcal{V}}} +\def\gW{{\mathcal{W}}} +\def\gX{{\mathcal{X}}} +\def\gY{{\mathcal{Y}}} +\def\gZ{{\mathcal{Z}}} + +% Sets +\def\sA{{\mathbb{A}}} +\def\sB{{\mathbb{B}}} +\def\sC{{\mathbb{C}}} +\def\sD{{\mathbb{D}}} +% Don't use a set called E, because this would be the same as our symbol +% for expectation. +\def\sF{{\mathbb{F}}} +\def\sG{{\mathbb{G}}} +\def\sH{{\mathbb{H}}} +\def\sI{{\mathbb{I}}} +\def\sJ{{\mathbb{J}}} +\def\sK{{\mathbb{K}}} +\def\sL{{\mathbb{L}}} +\def\sM{{\mathbb{M}}} +\def\sN{{\mathbb{N}}} +\def\sO{{\mathbb{O}}} +\def\sP{{\mathbb{P}}} +\def\sQ{{\mathbb{Q}}} +\def\sR{{\mathbb{R}}} +\def\sS{{\mathbb{S}}} +\def\sT{{\mathbb{T}}} +\def\sU{{\mathbb{U}}} +\def\sV{{\mathbb{V}}} +\def\sW{{\mathbb{W}}} +\def\sX{{\mathbb{X}}} +\def\sY{{\mathbb{Y}}} +\def\sZ{{\mathbb{Z}}} + +% Entries of a matrix +\def\emLambda{{\Lambda}} +\def\emA{{A}} +\def\emB{{B}} +\def\emC{{C}} +\def\emD{{D}} +\def\emE{{E}} +\def\emF{{F}} +\def\emG{{G}} +\def\emH{{H}} +\def\emI{{I}} +\def\emJ{{J}} +\def\emK{{K}} +\def\emL{{L}} +\def\emM{{M}} +\def\emN{{N}} +\def\emO{{O}} +\def\emP{{P}} +\def\emQ{{Q}} +\def\emR{{R}} +\def\emS{{S}} +\def\emT{{T}} +\def\emU{{U}} +\def\emV{{V}} +\def\emW{{W}} +\def\emX{{X}} +\def\emY{{Y}} +\def\emZ{{Z}} +\def\emSigma{{\Sigma}} + +% entries of a tensor +% Same font as tensor, without \bm wrapper +\newcommand{\etens}[1]{\mathsfit{#1}} +\def\etLambda{{\etens{\Lambda}}} +\def\etA{{\etens{A}}} +\def\etB{{\etens{B}}} +\def\etC{{\etens{C}}} +\def\etD{{\etens{D}}} +\def\etE{{\etens{E}}} +\def\etF{{\etens{F}}} +\def\etG{{\etens{G}}} +\def\etH{{\etens{H}}} +\def\etI{{\etens{I}}} +\def\etJ{{\etens{J}}} +\def\etK{{\etens{K}}} +\def\etL{{\etens{L}}} +\def\etM{{\etens{M}}} +\def\etN{{\etens{N}}} +\def\etO{{\etens{O}}} +\def\etP{{\etens{P}}} +\def\etQ{{\etens{Q}}} +\def\etR{{\etens{R}}} +\def\etS{{\etens{S}}} +\def\etT{{\etens{T}}} +\def\etU{{\etens{U}}} +\def\etV{{\etens{V}}} +\def\etW{{\etens{W}}} +\def\etX{{\etens{X}}} +\def\etY{{\etens{Y}}} +\def\etZ{{\etens{Z}}} + +% The true underlying data generating distribution +\newcommand{\pdata}{p_{\rm{data}}} +% The empirical distribution defined by the training set +\newcommand{\ptrain}{\hat{p}_{\rm{data}}} +\newcommand{\Ptrain}{\hat{P}_{\rm{data}}} +% The model distribution +\newcommand{\pmodel}{p_{\rm{model}}} +\newcommand{\Pmodel}{P_{\rm{model}}} +\newcommand{\ptildemodel}{\tilde{p}_{\rm{model}}} +% Stochastic autoencoder distributions +\newcommand{\pencode}{p_{\rm{encoder}}} +\newcommand{\pdecode}{p_{\rm{decoder}}} +\newcommand{\precons}{p_{\rm{reconstruct}}} + +\newcommand{\laplace}{\mathrm{Laplace}} % Laplace distribution + +\newcommand{\E}{\mathbb{E}} +\newcommand{\Ls}{\mathcal{L}} +\newcommand{\R}{\mathbb{R}} +\newcommand{\emp}{\tilde{p}} +\newcommand{\lr}{\alpha} +\newcommand{\reg}{\lambda} +\newcommand{\rect}{\mathrm{rectifier}} +\newcommand{\softmax}{\mathrm{softmax}} +\newcommand{\sigmoid}{\sigma} +\newcommand{\softplus}{\zeta} +\newcommand{\KL}{D_{\mathrm{KL}}} +\newcommand{\Var}{\mathrm{Var}} +\newcommand{\standarderror}{\mathrm{SE}} +\newcommand{\Cov}{\mathrm{Cov}} +% Wolfram Mathworld says $L^2$ is for function spaces and $\ell^2$ is for vectors +% But then they seem to use $L^2$ for vectors throughout the site, and so does +% wikipedia. +\newcommand{\normlzero}{L^0} +\newcommand{\normlone}{L^1} +\newcommand{\normltwo}{L^2} +\newcommand{\normlp}{L^p} +\newcommand{\normmax}{L^\infty} + +\newcommand{\parents}{Pa} % See usage in notation.tex. Chosen to match Daphne's book. + +\DeclareMathOperator*{\argmax}{arg\,max} +\DeclareMathOperator*{\argmin}{arg\,min} + +\DeclareMathOperator{\sign}{sign} +\DeclareMathOperator{\Tr}{Tr} +\let\ab\allowbreak diff --git a/auto_survey/utils/latex_templates/Default/related works.tex b/auto_survey/utils/latex_templates/Default/related works.tex new file mode 100644 index 0000000..e69de29 diff --git a/auto_survey/utils/latex_templates/Default/survey.md b/auto_survey/utils/latex_templates/Default/survey.md new file mode 100644 index 0000000..e69de29 diff --git a/auto_survey/utils/latex_templates/Default/survey_chinese.md b/auto_survey/utils/latex_templates/Default/survey_chinese.md new file mode 100644 index 0000000..e69de29 diff --git a/auto_survey/utils/latex_templates/Default/template.tex b/auto_survey/utils/latex_templates/Default/template.tex new file mode 100644 index 0000000..b48b20f --- /dev/null +++ b/auto_survey/utils/latex_templates/Default/template.tex @@ -0,0 +1,37 @@ +\documentclass{article} % For LaTeX2e +\UseRawInputEncoding +\usepackage{graphicx} +\usepackage{booktabs} +\usepackage{times} +\usepackage{eso-pic} % used by \AddToShipoutPicture +\RequirePackage{fancyhdr} +\RequirePackage{natbib} +\usepackage{fullpage} + +\input{math_commands.tex} +\usepackage{hyperref} +\usepackage{url} +\usepackage{algorithm} +\usepackage{algpseudocode} + +\newlength\tindent +\setlength{\tindent}{\parindent} +\setlength{\parindent}{0pt} +\renewcommand{\indent}{\hspace*{\tindent}} + +\title{TITLE} +\author{gpt-3.5-turbo-16k} + +\newcommand{\fix}{\marginpar{FIX}} +\newcommand{\new}{\marginpar{NEW}} + +\begin{document} +\maketitle + +\input{related works.tex} + +\bibliography{ref} +\bibliographystyle{dinat} + + +\end{document} diff --git a/auto_survey/utils/prompts.py b/auto_survey/utils/prompts.py new file mode 100644 index 0000000..40d14a9 --- /dev/null +++ b/auto_survey/utils/prompts.py @@ -0,0 +1,23 @@ +import logging +from langchain import PromptTemplate +import os, json +log = logging.getLogger(__name__) +keywords_system_prompt_str = """You are an assistant designed to provide accurate and informative keywords of searching academic papers. +The user will input the title of a paper. You need to return three to five most related fields. \n +Instructions:\n +- Assign numbers to each field to present the importance. The larger, the more important. \n +- 10 is the most important and 1 is the least important. \n +- Your response should follow the following format: {"field 1": 5, "field 2": 7, "field 3": 8, "field 4": 5}\n +- Ensure the response can be parsed by Python json.loads""" + +preliminaries_system_prompt_str = '''You are an assistant designed to propose preliminary concepts for a paper given its title and contributions. Ensure follow the following instructions: +Instruction: +- Your response should follow the JSON format. +- Your response should have the following structure: {"name of the concept": 1, {"name of the concept": 2, ...} +- Smaller number means the concept is more fundamental and should be introduced earlier. ''' + +PRELIMINARIES = preliminaries_system_prompt_str +KEYWORDS = keywords_system_prompt_str +SYSTEM = {"keywords": KEYWORDS, "preliminaries": PRELIMINARIES} + + diff --git a/auto_survey/utils/references.py b/auto_survey/utils/references.py new file mode 100644 index 0000000..5418043 --- /dev/null +++ b/auto_survey/utils/references.py @@ -0,0 +1,470 @@ +# Each `paper` is a dictionary containing: +# (1) paper_id (2) title (3) authors (4) year (5) link (6) abstract (7) journal (8) embeddings +# +# Generate references: +# `Reference` class: +# 1. Read a given .bib file to collect papers; use `search_paper_abstract` method to fill missing abstract. +# 2. Given some keywords; use Semantic Scholar API to find papers. +# 3. Generate bibtex from the selected papers. --> to_bibtex() +# 4. Generate prompts from the selected papers: --> to_prompts() +# A sample prompt: {"paper_id": "paper summary"} + +# todo: (1) citations & citedby of provided papers: +# load the pre-defined papers; use S2 to find all related works +# add all citations to `bib_papers` +# add all citedby to `bib_papers` +# use Semantic Scholar to find their embeddings +# (2) separate references: +# divide references into different groups to reduce the tokens count +# for generating different paragraph of related works, use different set of references +from typing import Dict, List +import requests +import re +import bibtexparser +import random +from scholarly import scholarly +from scholarly import ProxyGenerator +import tiktoken +import itertools, uuid, json +from gradio_client import Client +import time +import numpy as np +from numpy.linalg import norm + + +URL = "https://model-apis.semanticscholar.org/specter/v1/invoke" +MAX_BATCH_SIZE = 16 +MAX_ATTEMPTS = 20 + +###################################################################################################################### +# Some basic tools +###################################################################################################################### +def evaluate_cosine_similarity(v1, v2): + try: + return np.dot(v1, v2)/(norm(v1)*norm(v2)) + except ValueError: + return 0.0 + +def chunks(lst, chunk_size=MAX_BATCH_SIZE): + """Splits a longer list to respect batch size""" + for i in range(0, len(lst), chunk_size): + yield lst[i : i + chunk_size] + +def embed(papers): + embeddings_by_paper_id: Dict[str, List[float]] = {} + for chunk in chunks(papers): + # Allow Python requests to convert the data above to JSON + response = requests.post(URL, json=chunk) + + if response.status_code != 200: + raise RuntimeError("Sorry, something went wrong, please try later!") + + for paper in response.json()["preds"]: + embeddings_by_paper_id[paper["paper_id"]] = paper["embedding"] + + return embeddings_by_paper_id + +def get_embeddings(paper_title, paper_description): + output = [{"title": paper_title, "abstract": paper_description, "paper_id": "target_paper"}] + emb_vector = embed(output)["target_paper"] + target_paper = output[0] + target_paper["embeddings"] = emb_vector + return target_paper + +def get_top_k(papers_dict, paper_title, paper_description, k=None): + target_paper = get_embeddings(paper_title, paper_description) + papers = papers_dict # must include embeddings + + # if k < len(papers_json), return k most relevant papers + # if k >= len(papers_json) or k is None, return all papers + max_num_papers = len(papers) + if k is None: + k = max_num_papers + num_papers = min(k, max_num_papers) + + # evaluate the cosine similarity for each paper + target_embedding_vector = target_paper["embeddings"] + + for k in papers: + v = papers[k] + embedding_vector = v["embeddings"] + cos_sim = evaluate_cosine_similarity(embedding_vector, target_embedding_vector) + papers[k]["cos_sim"] = cos_sim + + # return the best k papers + sorted_papers = {k: v for k, v in sorted(papers.items(), key=lambda x: x[1]["cos_sim"], reverse=True)[:num_papers]} + for key in sorted_papers: + sorted_papers[key].pop("embeddings", None) + return sorted_papers + +def remove_newlines(serie): + # This function is applied to the abstract of each paper to reduce the length of prompts. + serie = serie.replace('\n', ' ') + serie = serie.replace('\\n', ' ') + serie = serie.replace(' ', ' ') + serie = serie.replace(' ', ' ') + return serie + + +def search_paper_abstract(title): + pg = ProxyGenerator() + success = pg.FreeProxies() # pg.ScraperAPI("921b16f94d701308b9d9b4456ddde155") + if success: + try: + scholarly.use_proxy(pg) + # input the title of a paper, return its abstract + search_query = scholarly.search_pubs(title) + found_paper = next(search_query) + except: + return "" + else: + return "" + # raise RuntimeError("ScraperAPI fails.") + return remove_newlines(found_paper['bib']['abstract']) + + +def load_papers_from_bibtex(bib_file_path): + with open(bib_file_path) as bibtex_file: + bib_database = bibtexparser.load(bibtex_file) + if len(bib_database.entries) == 0: + return [] + else: + bib_papers = [] + for bibitem in bib_database.entries: + # Add each paper to `bib_papers` + paper_id = bibitem.get("ID") + title = bibitem.get("title") + if title is None: + continue + journal = bibitem.get("journal") + year = bibitem.get("year") + author = bibitem.get("author") + abstract = bibitem.get("abstract") + if abstract is None: + abstract = search_paper_abstract(title) + result = { + "paper_id": paper_id, + "title": title, + "link": "", + "abstract": abstract, + "authors": author, + "year": year, + "journal": journal + } + bib_papers.append(result) + return bib_papers + +# `tokenizer`: used to count how many tokens +tokenizer_name = tiktoken.encoding_for_model('gpt-4') +tokenizer = tiktoken.get_encoding(tokenizer_name.name) + + +def tiktoken_len(text): + # evaluate how many tokens for the given text + tokens = tokenizer.encode(text, disallowed_special=()) + return len(tokens) + + +###################################################################################################################### +# Semantic Scholar (SS) API +###################################################################################################################### +def ss_search(keywords, limit=20, fields=None): + # space between the query to be removed and replaced with + + if fields is None: + fields = ["title", "abstract", "venue", "year", "authors", "tldr", "embedding", "externalIds"] + keywords = keywords.lower() + keywords = keywords.replace(" ", "+") + url = f'https://api.semanticscholar.org/graph/v1/paper/search?query={keywords}&limit={limit}&fields={",".join(fields)}' + # headers = {"Accept": "*/*", "x-api-key": constants.S2_KEY} + headers = {"Accept": "*/*"} + + response = requests.get(url, headers=headers, timeout=30) + return response.json() + + +def _collect_papers_ss(keyword, counts=3, tldr=False): + def externalIds2link(externalIds): + # Sample externalIds: + # "{'MAG': '2932819148', 'DBLP': 'conf/icml/HaarnojaZAL18', 'ArXiv': '1801.01290', 'CorpusId': 28202810}" + if externalIds: + # Supports ArXiv, MAG, ACL, PubMed, Medline, PubMedCentral, DBLP, DOI + # priority: DBLP > arXiv > (todo: MAG > CorpusId > DOI > ACL > PubMed > Mdeline > PubMedCentral) + # DBLP + dblp_id = externalIds.get('DBLP') + if dblp_id is not None: + dblp_link = f"dblp.org/rec/{dblp_id}" + return dblp_link + # arXiv + arxiv_id = externalIds.get('ArXiv') + if arxiv_id is not None: + arxiv_link = f"arxiv.org/abs/{arxiv_id}" + return arxiv_link + return "" + else: + # if this is an empty dictionary, return an empty string + return "" + + def extract_paper_id(last_name, year_str, title): + pattern = r'^\w+' + words = re.findall(pattern, title) + # return last_name + year_str + title.split(' ', 1)[0] + try: + output = last_name + year_str + words[0] + except IndexError: + output = last_name + year_str + title[:4] + return output + + def extract_author_info(raw_authors): + authors = [author['name'] for author in raw_authors] + + authors_str = " and ".join(authors) + try: + last_name = authors[0].split()[-1] + last_name = last_name.replace("'", "") + except IndexError: + last_name = "ma" + # pattern = r'^\w+' + # last_name = re.findall(pattern, authors[0]) + return authors_str, last_name + + def parse_search_results(search_results_ss): + if len(search_results_ss) == 0: + return [] + + # turn the search result to a list of paper dictionary. + papers_ss = [] + for raw_paper in search_results_ss: + if raw_paper["abstract"] is None: + continue + + authors_str, last_name = extract_author_info(raw_paper['authors']) + year_str = str(raw_paper['year']) + title = raw_paper['title'] + + # some journal may contain &; replace it. e.g. journal={IEEE Power & Energy Society General Meeting} + journal = raw_paper['venue'].replace("&", "\\&") + if not journal: + journal = "arXiv preprint" + + paper_id = extract_paper_id(last_name, year_str, title).lower() + link = externalIds2link(raw_paper['externalIds']) + + if tldr and raw_paper['tldr'] is not None: + abstract = raw_paper['tldr']['text'] + else: + abstract = remove_newlines(raw_paper['abstract']) + + # some papers have no embeddings; handle this case + embeddings_dict = raw_paper.get('embedding') + if embeddings_dict is None: + continue + else: + embeddings = raw_paper['embedding']['vector'] + result = { + "paper_id": paper_id, + "title": title, + "abstract": abstract, + "link": link, + "authors": authors_str, + "year": year_str, + "journal": journal, + "embeddings": embeddings + } + papers_ss.append(result) + return papers_ss + + raw_results = ss_search(keyword, limit=counts) + if raw_results is not None: + search_results = raw_results.get("data") + if search_results is None: + search_results = [] + else: + search_results = [] + results = parse_search_results(search_results) + return results + + +###################################################################################################################### +# References Class +###################################################################################################################### + +class References: + def __init__(self, title, load_papers=None, keyword="customized_refs", description=""): + if load_papers is not None: + self.papers = {keyword: load_papers_from_bibtex(load_papers)} + else: + self.papers = {} + self.title = title + self.description = description + + def load_papers(self, bibtex, keyword): + self.papers[keyword] = load_papers_from_bibtex(bibtex) + + def generate_keywords_dict(self): + keywords_dict = {} + for k in self.papers: + keywords_dict[k] = len(self.papers[k]) + return keywords_dict + + def collect_papers(self, keywords_dict, tldr=False): + """ + Collect as many papers as possible + + keywords_dict: + {"machine learning": 5, "language model": 2}; + the first is the keyword, the second is how many references are needed. + """ + keywords = list(keywords_dict) + comb_keywords = list(itertools.combinations(keywords, 2)) + for comb_keyword in comb_keywords: + keywords.append(" ".join(comb_keyword)) + for key in keywords: + self.papers[key] = _collect_papers_ss(key, 10, tldr) + # print("Collected papers: ", papers) + # for key, counts in keywords_dict.items(): + # self.papers[key] = _collect_papers_ss(key, counts, tldr) + + def to_bibtex(self, path_to_bibtex="ref.bib"): + """ + Turn the saved paper list into bibtex file "ref.bib". Return a list of all `paper_id`. + """ + # todo: + # use embeddings to evaluate; keep top k relevant references in papers + # send (title, .bib file) to evaluate embeddings; recieve truncated papers + papers = self._get_papers(keyword="_all") + + l = len(papers) + print(f"{l} papers will be added to `ref.bib`.") + # clear the bibtex file + with open(path_to_bibtex, "w", encoding="utf-8") as file: + file.write("") + + bibtex_entries = [] + paper_ids = [] + seen = set() + for paper in papers: + if paper["paper_id"] in seen: + continue + else: + seen.add(paper["paper_id"]) + bibtex_entry = f"""@article{{{paper["paper_id"]}, + title = {{{paper["title"]}}}, + author = {{{paper["authors"]}}}, + journal={{{paper["journal"]}}}, + year = {{{paper["year"]}}}, + url = {{{paper["link"]}}} + }}""" + bibtex_entries.append(bibtex_entry) + paper_ids.append(paper["paper_id"]) + # Save the generated BibTeX entries to a file + with open(path_to_bibtex, "a", encoding="utf-8") as file: + file.write(bibtex_entry) + file.write("\n\n") + # print(f'{paper["paper_id"]} has been added to `ref.bib`.') + return paper_ids + + def _get_papers(self, keyword="_all"): + if keyword == "_all": + papers = [] + for k, v in self.papers.items(): + papers = papers + v + else: + papers = self.papers["keyword"] + return papers + + def to_prompts(self, keyword="_all", max_tokens=2048): + # `prompts`: + # {"paper1_bibtex_id": "paper_1_abstract", "paper2_bibtex_id": "paper2_abstract"} + # this will be used to instruct GPT model to cite the correct bibtex entry. + + # two steps: + # 1. Sort everything from most relevant to less relevant + # 2. Add paper to prompts until max_tokens + json_path = str(uuid.uuid1()) + ".json" + papers_json = self.to_json() + # with open(json_path, "w") as f: + # json.dump(papers_json, f) + + try: + # Use external API to obtain the most relevant papers + title = self.title + description = self.description + result = get_top_k(papers_json, title, description) + # client = Client("https://shaocongma-evaluate-specter-embeddings.hf.space/") + # result = client.predict( + # title, # str in 'Title' Textbox component + # json_path, # str (filepath or URL to file) in 'Papers JSON (as string)' File component + # 50, # int | float (numeric value between 1 and 50) in 'Top-k Relevant Papers' Slider component + # api_name="/get_k_relevant_papers" + # ) + # with open(result) as f: + # result = json.load(f) + result = [item for key, item in result.items()] + except Exception as e: + print(f"Error occurs during calling external API: {e}\n") + print("Use default method instead!") + result = self._get_papers(keyword) + prompts = {} + tokens = 0 + for paper in result: + abstract = paper.get("abstract") + if abstract is not None and isinstance(abstract, str): + prompts[paper["paper_id"]] = paper["abstract"] + tokens += tiktoken_len(paper["abstract"]) + else: + prompts[paper["paper_id"]] = " " + if tokens >= max_tokens: + break + return prompts + + def to_json(self, keyword="_all"): + papers = self._get_papers(keyword) + papers_json = {} + for paper in papers: + papers_json[paper["paper_id"]] = paper + return papers_json + + +if __name__ == "__main__": + # testing search results + print("================Testing `ss_search`================") + r = ss_search("Deep Q-Networks", limit=1) # a list of raw papers + if r['total'] > 0: + paper = r['data'][0] + # print(paper) + + # resting References + print("================Testing `References`================") + refs = References(title="Super Deep Q-Networks") + keywords_dict = { + "Deep Q-Networks": 5, + "Actor-Critic Algorithms": 4, + "Exploration-Exploitation Trade-off": 3 + } + print("================Testing `References.collect_papers`================") + refs.collect_papers(keywords_dict, tldr=True) + for k in refs.papers: + papers = refs.papers[k] # for each keyword, there is a list of papers + print("keyword: ", k) + for paper in papers: + print(paper["paper_id"]) + + print("================Testing `References.to_bibtex`================") + refs.to_bibtex() + + print("================Testing `References.to_json`================") + papers_json = refs.to_json() # this json can be used to find the most relevant papers + with open("papers.json", "w", encoding='utf-8') as text_file: + text_file.write(f"{papers_json}") + + print("================Testing `References.to_prompts`================") + prompts = refs.to_prompts() + print(prompts) + + # bib = "test.bib" + # refs.load_papers(bib, "variance-reduction rl") + # print(refs.papers) + # + # prompts = refs.to_prompts() + # for k in prompts: + # print(f"{k}: {prompts[k]}\n") diff --git a/auto_survey/utils/storage.py b/auto_survey/utils/storage.py new file mode 100644 index 0000000..3911279 --- /dev/null +++ b/auto_survey/utils/storage.py @@ -0,0 +1,52 @@ +# This script `storage.py` is used to handle the cloud storage. +# `upload_file`: +# Function to upload a local file to the specified S3 bucket. +# If the target_name is not specified, it will use the file_name as the object key. +# `list_all_files`: +# Function to list all the files in the specified S3 bucket. +# `download_file`: +# Function to download a file from the specified S3 bucket to the local machine using the specified file_name. + +import os +import boto3 + +BUCKET_NAME = "hf-storage" + +def get_client(): + access_key_id = os.getenv('AWS_ACCESS_KEY_ID') + secret_access_key = os.getenv('AWS_SECRET_ACCESS_KEY') + session = boto3.Session( + aws_access_key_id=access_key_id, + aws_secret_access_key=secret_access_key, + ) + s3 = session.resource('s3') + bucket = s3.Bucket(BUCKET_NAME) + return s3, bucket + +def upload_file(file_name, target_name=None): + s3, _ = get_client() + + if target_name is None: + target_name = file_name + s3.meta.client.upload_file(Filename=file_name, Bucket=BUCKET_NAME, Key=target_name) + print(f"The file {file_name} has been uploaded!") + + +def list_all_files(): + _, bucket = get_client() + return [obj.key for obj in bucket.objects.all()] + + +def download_file(file_name): + ''' Download `file_name` from the bucket. + Bucket (str) – The name of the bucket to download from. + Key (str) – The name of the key to download from. + Filename (str) – The path to the file to download to. + ''' + s3, _ = get_client() + s3.meta.client.download_file(Bucket=BUCKET_NAME, Key=file_name, Filename=file_name) + print(f"The file {file_name} has been downloaded!") + +if __name__ == "__main__": + file = "sample-output.pdf" + upload_file(file) diff --git a/auto_survey/utils/tex_processing.py b/auto_survey/utils/tex_processing.py new file mode 100644 index 0000000..9c63a86 --- /dev/null +++ b/auto_survey/utils/tex_processing.py @@ -0,0 +1,68 @@ +import os +import re +import shutil + +def replace_title(save_to_path, title): + # Define input and output file names + input_file_name = os.path.join(save_to_path, "template.tex") + output_file_name = os.path.join(save_to_path , "main.tex") + + # Open the input file and read its content + with open(input_file_name, 'r') as infile: + content = infile.read() + content = content.replace(r"\title{TITLE} ", f"\\title{{{title}}} ") + + # Open the output file and write the modified content + with open(output_file_name, 'w') as outfile: + outfile.write(content) + + +# return all string in \cite{...} \citet{...} or \citep{...}. + +# check if citations are in bibtex. + +# replace citations + +# sometimes the output may include thebibliography and bibitem . remove all of it. + +# return all .png and replace it using placeholder. + +def find_tex_files(directory_path): + tex_files = [] + + for filename in os.listdir(directory_path): + if filename.endswith(".tex"): + tex_files.append(filename) + + return tex_files + +def find_figure_names(tex_file_path): + # Regular expression pattern to find \includegraphics commands + pattern = r'\\includegraphics.*?{(.*?)}' + with open(tex_file_path, 'r') as file: + content = file.read() + # Find all matches in the file content + matches = re.findall(pattern, content) + # Matches will be a list of figure names + return matches + +def create_copies(output_dir): + tex_files = find_tex_files(output_dir) + for tex_file in tex_files: + path = os.path.join(output_dir, tex_file) + all_figs = find_figure_names(path) + for fig in all_figs: + original_fig = os.path.join(output_dir, "fig.png") + target_fig = os.path.join(output_dir, fig) + shutil.copy2(original_fig, target_fig) + + +# todo: post-processing the generated algorithm for correct compile. + + + +if __name__ == "__main__": + pass + + +