Papers › Offline Reinforcement Learning with Implicit Q-Learning

Offline Reinforcement Learning with Implicit Q-Learning

12 Oct 2021arXiv:2110.06169archive 2025-07-28

Ilya Kostrikov, Ashvin Nair, Sergey Levine

Offline reinforcement learning requires reconciling two conflicting aims: learning a policy that improves over the behavior policy that collected the dataset, while at the same time minimizing the deviation from the behavior policy so as to avoid errors due to distributional shift. This trade-off is critical, because most current offline reinforcement learning methods need to query the value of unseen actions during training to improve the policy, and therefore need to either constrain these actions to be in-distribution, or else regularize their values. We propose an offline RL method that never needs to evaluate actions outside of the dataset, but still enables the learned policy to improve substantially over the best behavior in the data through generalization. The main insight in our work is that, instead of evaluating unseen actions from the latest policy, we can approximate the policy improvement step implicitly by treating the state value function as a random variable, with randomness determined by the action (while still integrating over the dynamics to avoid excessive optimism), and then taking a state conditional upper expectile of this random variable to estimate the value of the best actions in that state. This leverages the generalization capacity of the function approximator to estimate the value of the best available action at a given state without ever directly querying a Q-function with this unseen action. Our algorithm alternates between fitting this upper expectile value function and backing it up into a Q-function. Then, we extract the policy via advantage-weighted behavioral cloning. We dub our method implicit Q-learning (IQL). IQL demonstrates the state-of-the-art performance on D4RL, a standard benchmark for offline reinforcement learning. We also demonstrate that IQL achieves strong performance fine-tuning using online interaction after offline initialization.

PaperPDFCodeCode Syntology ran

In Syntology Open this paper in Syntology's Atlas, the map of the papers in Syntology's graph and their citations.

For agents, Syntology's MCP tool lists every function and class Syntology harvested from this paper and whether it ran (how to connect): get_harvested_code_for_paper(arxiv_id="2110.06169")

Code

Syntology Ran 32 of 58 code samples harvested from 11 repositories linked to this paper; 26 have no recorded run. Of those that ran: 8 ran · our draft was wrong; 24 ran with no contract checked.

By repository: community (archive-listed): 57 samples from 11 repositories, 31 ran; 1 identical to code first harvested elsewhere. The run record, sample by sample. “Ran” means executed on a synthesized input, not that the code is correct or reproduces the paper.

17 repositories listed; official and paper-mentioned ones first.

rail-berkeley/rlkit officialmentioned in papermentioned on GitHubpytorchMIT report
ikostrikov/implicit_q_learning officialmentioned on GitHubjax report
BY571/Implicit-Q-Learning mentioned on GitHubpytorch report
corl-team/CORL mentioned on GitHubjax report
dasgringuen/assetto_corsa_gym mentioned on GitHubpytorchMIT report
gwthomas/iql-pytorch mentioned on GitHubpytorch report
linhlpv/Offline-and-OfflineOnline-RL mentioned on GitHubpytorch report
orrivlin/implicit-q-learning mentioned on GitHubpytorch report
perrin-isir/afu mentioned on GitHubjaxNOASSERTION report
runamu/compositional-conservatism mentioned on GitHubpytorch report
takuseno/d3rlpy mentioned on GitHubpytorchMIT report
typoverflow/OfflineRL-Lib mentioned on GitHubpytorch report
yihaosun1124/OfflineRL-Kit mentioned on GitHubpytorch report
zzmtsvv/rl_task mentioned on GitHubpytorch report

Repository list and official/mentioned flags are the archive's, frozen 2025-07-28. Reachability, where shown, is from one Syntology probe window (2026-09-16 to 2026-09-18); repositories not probed show nothing. GitHub stars are not tracked.

Code Syntology ran Syntology

58 samples harvested; 32 ran; 0 honoured the contract we drafted; 26 have no recorded run. Read from Syntology's graph 2026-09-24; that is when this build read the record, not when the samples ran.

8ran · our draft was wrong
24ran
26unverified

Licence: 22 of the 58 samples are pointer only, meaning Syntology does not serve that copy's text. This page shows no code text for any sample; each one links to its file in the repository.

Harvested from 11 repositories linked to this paper, official or community; each sample names its own and says which. Some samples are identical code Syntology first harvested from another repository; for those, this paper's copy is not located and its licence is not recorded. “Ran” means the sample executed on a synthesized input. It does not mean the output is correct, and nothing here reproduces the paper's results. “Honoured” and “violated” refer to a contract Syntology drafted from the code itself; “our draft was wrong” and “fixture could not drive it” are failures of Syntology's instrument, not of the code.

Each sample ends with its code_sha256, Syntology's identity for that exact code. An agent fetches the stored sample with Syntology's MCP tool get_code(code_sha256="…") (how to connect); click an identity to copy that call.

Repository labels, per sample. official repository: The archive marks this repository official for the paper. named in the paper: The archive records that the paper mentions this repository; it is not marked official. community (archive-listed): In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper. found in paper text by Syntology: Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted. community: Not in the archive's code links for this paper; a community repository Syntology harvested. Samples from a repository marked official are listed first. Licence labels name the repository's licence as recorded at harvest. “Pointer only” means Syntology does not serve that copy's text, for one of four reasons: no licence file was found; the licence was not identified; the licence is recorded as permissive but that copy's record is not marked cleared; or the licence is outside the permissive list Syntology serves text under (MIT, Apache-2.0, BSD and similar). Some licences outside that list permit redistribution, such as WTFPL, and GPL-3.0 under its conditions; they are simply not on the list. Hover a licence label for the reason. File links open the file on GitHub at the default branch, which may have changed since the harvest.

Actor orrivlin/implicit-q-learning/IQL.py community (archive-listed) ran · metamorphic tier: deterministic fingerprinted no licence file found · pointer only · 9a453c413229c3e8 · report
Actor Manchery/iql-pytorch/IQL.py community (archive-listed) ran fingerprinted no licence file found · pointer only · 966c8f4b02ba3120 · report
Actor BY571/Implicit-Q-Learning/agent.py community (archive-listed) ran fingerprinted no licence file found · pointer only · b6a1eedb944158c8 · report
BasePolicy yihaosun1124/OfflineRL-Kit/offlinerlkit/policy/model_free/iql.py community (archive-listed) ran · metamorphic tier: deterministic MIT (permissive) · bc6ec59a73ed3500 · report
BasePolicy typoverflow/OfflineRL-Lib/offlinerllib/policy/model_free/iql.py community (archive-listed) ran MIT (permissive) · f49a5596a23ec01c · report
Critic orrivlin/implicit-q-learning/IQL.py community (archive-listed) ran · metamorphic tier: deterministic no licence file found · pointer only · 80a6ad9eabb2130a · report
Critic Manchery/iql-pytorch/IQL.py community (archive-listed) ran no licence file found · pointer only · babedc4feb0bd1bc · report
Critic BY571/Implicit-Q-Learning/agent.py community (archive-listed) ran no licence file found · pointer only · 1a4179d29d5698c1 · report
DiagGaussianActor orrivlin/implicit-q-learning/IQL.py community (archive-listed) ran · metamorphic tier: deterministic no licence file found · pointer only · 96a8264069e38c3a · report
EnsembleLinear typoverflow/OfflineRL-Lib/offlinerllib/policy/model_free/iql.py community (archive-listed) ran MIT (permissive) · 8d9ce25604e09aac · report
IQL Manchery/iql-pytorch/IQL.py community (archive-listed) ran no licence file found · pointer only · 6310a7198b14e85d · report
IQL BY571/Implicit-Q-Learning/agent.py community (archive-listed) ran no licence file found · pointer only · c23983ba22a35975 · report
IQLPolicy yihaosun1124/OfflineRL-Kit/offlinerlkit/policy/model_free/iql.py community (archive-listed) ran · metamorphic tier: deterministic MIT (permissive) · d14cce65ce43e79e · report
IQLPolicy runamu/compositional-conservatism/offlinerlkit/policy/model_free/iql.py community (archive-listed) ran MIT (permissive) · ec0dfb8aa1f8f95a · report
ImplicitQLearning gwthomas/iql-pytorch/src/iql.py community (archive-listed) ran · metamorphic tier: deterministic MIT (permissive) · 27ef9688ee8bc0c2 · report
ImplicitQLearning linhlpv/Offline-and-OfflineOnline-RL/IQL/iql.py community (archive-listed) ran no licence file found · pointer only · 99526660d7c044e6 · report
ImplicitQLearning corl-team/CORL/algorithms/offline/iql.py community (archive-listed) ran Apache-2.0 (permissive) · 73d62bef000c40fa · report
MLP orrivlin/implicit-q-learning/IQL.py community (archive-listed) ran · metamorphic tier: deterministic no licence file found · pointer only · 43876c48b7ed9f0e · report
MLP typoverflow/OfflineRL-Lib/offlinerllib/policy/model_free/iql.py community (archive-listed) ran MIT (permissive) · e8ccb12a6101441f · report
MLP Manchery/iql-pytorch/IQL.py community (archive-listed) ran no licence file found · pointer only · 7681050968341abc · report
Value orrivlin/implicit-q-learning/IQL.py community (archive-listed) ran · metamorphic tier: deterministic fingerprinted no licence file found · pointer only · ab256778314dd6eb · report
Value BY571/Implicit-Q-Learning/agent.py community (archive-listed) ran fingerprinted no licence file found · pointer only · f90b550029795ff8 · report
ValueCritic Manchery/iql-pytorch/IQL.py community (archive-listed) ran no licence file found · pointer only · 03c7a0d62a9a41b5 · report
asymmetric_l2_loss linhlpv/Offline-and-OfflineOnline-RL/IQL/iql.py community (archive-listed) ran · our draft was wrong fingerprinted no licence file found · pointer only · b2bdeb779182394b · report
convert_to_tensor typoverflow/OfflineRL-Lib/offlinerllib/policy/model_free/iql.py community (archive-listed) ran · our draft was wrong MIT (permissive) · dbb570ccd708ff1e · report
expectile_loss orrivlin/implicit-q-learning/IQL.py community (archive-listed) ran · our draft was wrong fingerprinted no licence file found · pointer only · f55fa75eaa288304 · report
expectile_regression typoverflow/OfflineRL-Lib/offlinerllib/policy/model_free/iql.py community (archive-listed) ran · our draft was wrong fingerprinted MIT (permissive) · d65d964e0519b495 · report
load_yaml dasgringuen/assetto_corsa_gym/assetto_corsa_gym/AssettoCorsaEnv/ac_env.py community (archive-listed) ran MIT (permissive) · cfb2071ad5f20847 · report
loss Manchery/iql-pytorch/IQL.py community (archive-listed) ran · our draft was wrong fingerprinted no licence file found · pointer only · 162c85e425a085c5 · report
make_target typoverflow/OfflineRL-Lib/offlinerllib/policy/model_free/iql.py community (archive-listed) ran · our draft was wrong MIT (permissive) · 553f6d4d94d916a1 · report
miniblock typoverflow/OfflineRL-Lib/offlinerllib/policy/model_free/iql.py community (archive-listed) ran · our draft was wrong MIT (permissive) · be003e2209473d34 · report
BaseActor typoverflow/OfflineRL-Lib/offlinerllib/policy/model_free/iql.py community (archive-listed) unverified MIT (permissive) · a2e8e5d2a2240f4c · report
BasePolicy runamu/compositional-conservatism/offlinerlkit/policy/model_free/iql.py community (archive-listed) unverified MIT (permissive) · 7c0883f7901f1f98 · report
DeterministicActor typoverflow/OfflineRL-Lib/offlinerllib/policy/model_free/iql.py community (archive-listed) unverified MIT (permissive) · 8f18a6efeac4cf16 · report
EnsembleMLP typoverflow/OfflineRL-Lib/offlinerllib/policy/model_free/iql.py community (archive-listed) unverified MIT (permissive) · 6970e6937dbee5a6 · report
GaussianActor typoverflow/OfflineRL-Lib/offlinerllib/policy/model_free/iql.py community (archive-listed) unverified MIT (permissive) · 1ea93cbf319bab05 · report
IQL orrivlin/implicit-q-learning/IQL.py community (archive-listed) unverified no licence file found · pointer only · 09d15343fe38fa60 · report
IQL zzmtsvv/rl_task/iql/iql.py community (archive-listed) unverified no licence file found · pointer only · 93fc887b580bd5ce · report
IQLPolicy typoverflow/OfflineRL-Lib/offlinerllib/policy/model_free/iql.py community (archive-listed) unverified MIT (permissive) · a369d99da375c4a9 · report
convert_to_seconds dasgringuen/assetto_corsa_gym/assetto_corsa_gym/AssettoCorsaEnv/ac_env.py community (archive-listed) unverified MIT (permissive) · e30a96134d01076a · report
curvature_splines dasgringuen/assetto_corsa_gym/assetto_corsa_gym/AssettoCorsaEnv/curvature.py community (archive-listed) unverified MIT (permissive) · b67b22a168cce1a0 · report
decode_string dasgringuen/assetto_corsa_gym/assetto_corsa_gym/AssettoCorsaEnv/motec_ldparser.py community (archive-listed) unverified MIT (permissive) · 4a012f1a3bd772ba · report
distance dasgringuen/assetto_corsa_gym/assetto_corsa_gym/AssettoCorsaEnv/gap_cpu.py community (archive-listed) unverified MIT (permissive) · 9c4866bb7ea6847e · report
distance dasgringuen/assetto_corsa_gym/assetto_corsa_gym/AssettoCorsaEnv/gap_torch.py community (archive-listed) unverified MIT (permissive) · 8262bb9a6731a45a · report
get_gap dasgringuen/assetto_corsa_gym/assetto_corsa_gym/AssettoCorsaEnv/gap.py community (archive-listed) unverified MIT (permissive) · 008fedc7a27baf05 · report
get_path_for_track_car dasgringuen/assetto_corsa_gym/assetto_corsa_gym/AssettoCorsaEnv/data_loader.py community (archive-listed) unverified MIT (permissive) · cb170ee52e2c253f · report
get_smooth_yaw dasgringuen/assetto_corsa_gym/assetto_corsa_gym/AssettoCorsaEnv/motec_loader.py community (archive-listed) unverified MIT (permissive) · 9a868703a6f4ebc5 · report
get_yaw dasgringuen/assetto_corsa_gym/assetto_corsa_gym/AssettoCorsaEnv/motec_loader.py community (archive-listed) unverified MIT (permissive) · 9aff92bfd00fb101 · report
iql_config zzmtsvv/rl_task/iql/iql.py community (archive-listed) unverified no licence file found · pointer only · 26547f61628cbc43 · report
length dasgringuen/assetto_corsa_gym/assetto_corsa_gym/AssettoCorsaEnv/gap_cpu.py community (archive-listed) unverified MIT (permissive) · 046abc4b4ab05935 · report
length dasgringuen/assetto_corsa_gym/assetto_corsa_gym/AssettoCorsaEnv/gap_torch.py community (archive-listed) unverified MIT (permissive) · 30afe5f53a0af6db · report
read_channels dasgringuen/assetto_corsa_gym/assetto_corsa_gym/AssettoCorsaEnv/motec_ldparser.py community (archive-listed) unverified MIT (permissive) · b7d05dedb09fbc7e · report
read_ldfile dasgringuen/assetto_corsa_gym/assetto_corsa_gym/AssettoCorsaEnv/motec_ldparser.py community (archive-listed) unverified MIT (permissive) · 3f617b1c2021d06a · report
read_yml dasgringuen/assetto_corsa_gym/assetto_corsa_gym/AssettoCorsaEnv/data_loader.py community (archive-listed) unverified MIT (permissive) · e10139c8cfcc9897 · report
seconds_to_mm_ss_mmm dasgringuen/assetto_corsa_gym/assetto_corsa_gym/AssettoCorsaEnv/data_loader.py community (archive-listed) unverified MIT (permissive) · b9421a30c9ec520e · report
update_exponential_moving_average gwthomas/iql-pytorch/src/iql.py community (archive-listed) unverified MIT (permissive) · ba061d6a7ffd45bf · report
vector dasgringuen/assetto_corsa_gym/assetto_corsa_gym/AssettoCorsaEnv/gap_cpu.py community (archive-listed) unverified MIT (permissive) · 5fbcfd39eca9be93 · report
asymmetric_l2_loss identical code first harvested elsewhere ran · our draft was wrong fingerprinted licence of this copy not recorded · 579d77f78c03773e · report

Tasks

D4RLOffline RLQ-LearningReinforcement LearningReinforcement Learning (RL)reinforcement-learning

Results from the paper archive 2025-07-28

No leaderboard rows for this paper in the archive.

Methods

Introduced by this paper: IQL

IQL

Report a problem or propose a change · a person checks every report against the paper or source before anything changes; decisions are listed on /corrections