{"action":"created","comment":{"url":"https://api.github.com/repos/sigopt/sigopt-examples/pulls/comments/90944778","pull_request_review_id":11457718,"id":90944778,"diff_hunk":"@@ -0,0 +1,317 @@\n+import gym\n+import time\n+import math\n+import sigopt\n+import numpy as np\n+import tensorflow as tf\n+\n+\n+# You can find your API token at https://sigopt.com/user/tokens\n+SIGOPT_API_KEY = 'YOUR_API_TOKEN_HERE'\n+# The game to train the DQN on. The default is CartPole-v0. You can also try LunarLander-v0 and Acrobot-v1\n+ENVIRONMENT_NAME = 'CartPole-v0'\n+# These values depend on which game you play. Choose reasonable values so that the agent has sufficient time to learn\n+MAX_EPISODES = 350\n+MAX_TIMESTEPS = 10000\n+# Determines whether the game should be rendered - set this to True to watch the agent play\n+SHOULD_RENDER = False\n+\n+\n+def main():\n+  conn = sigopt.Connection(client_token=SIGOPT_API_KEY)\n+\n+  experiment = conn.experiments().create(\n+    name= ENVIRONMENT_NAME + ' (DQN)',\n+    observation_budget=128,\n+    parameters=[\n+      dict(name='hm', type='int', bounds=dict(min=5, max=100)),\n+      dict(name='mb_size', type='int', bounds=dict(min=10, max=500)),\n+      dict(name='e_decay', type='int', bounds=dict(min=MAX_EPISODES/10, max=MAX_EPISODES)),\n+      dict(name='log_lr', type='double', bounds=dict(min=math.log(0.00001), max=math.log(1.0))),\n+      dict(name='df', type='double', bounds=dict(min=0.5, max=0.9999)),\n+      dict(name='weight_sd', type='double', bounds=dict(min=0.01, max=0.5)),\n+      dict(name='bias_sd', type='double', bounds=dict(min=0.0, max=0.5))\n+    ]\n+  )\n+\n+  # Run the SigOpt experiment loop\n+  for _ in range(experiment.observation_budget):\n+    suggestion = conn.experiments(experiment.id).suggestions().create()\n+\n+    objective_metric = run_environment(\n+      hidden_multiplier=suggestion.assignments['hm'],\n+      minibatch_size=suggestion.assignments['mb_size'],\n+      epsilon_decay_steps=suggestion.assignments['e_decay'],\n+      learning_rate=math.exp(suggestion.assignments['log_lr']),\n+      discount_factor=suggestion.assignments['df'],\n+      initial_weight_stddev=suggestion.assignments['weight_sd'],\n+      initial_bias_stddev=suggestion.assignments['bias_sd']\n+    )\n+\n+    conn.experiments(experiment.id).observations().create(\n+      suggestion=suggestion.id,\n+      value=objective_metric,\n+    )\n+\n+\n+def run_environment(\n+  hidden_multiplier,\n+  minibatch_size,\n+  epsilon_decay_steps,\n+  learning_rate,\n+  discount_factor,\n+  initial_weight_stddev,\n+  initial_bias_stddev\n+):\n+\n+  env = gym.make(ENVIRONMENT_NAME)\n+  # The number of states about the environment the agent can observe\n+  observation_space_dim = env.observation_space.shape[0]\n+  # The number of actions the agent can make\n+  action_space_dim = env.action_space.n\n+\n+  # The dimensions of the layers of the Q-network\n+  layer_dims = [\n+    observation_space_dim,\n+    hidden_multiplier * observation_space_dim,\n+    hidden_multiplier * observation_space_dim,\n+    action_space_dim\n+  ]\n+\n+  neural_net = QNetwork(\n+    layer_dims,\n+    dict(\n+      learning_rate=learning_rate,\n+      initial_weight_stddev=initial_weight_stddev,\n+      initial_bias_stddev=initial_bias_stddev\n+    )\n+  )\n+\n+  with tf.Session() as session:\n+    agent = Agent(\n+      session,\n+      neural_net,\n+      action_space_dim,\n+      minibatch_size,\n+      discount_factor,\n+      epsilon_decay_steps\n+    )\n+\n+    session.run(tf.initialize_all_variables())\n+\n+    # Run the environment feedback loop\n+    for episode in range(1, MAX_EPISODES + 1):\n+      observation = env.reset()\n+      reward = 0.0\n+      done = False\n+      action, done = agent.act(session, observation, reward, done, episode)\n+\n+      while not done:\n+        if SHOULD_RENDER:\n+          env.render()\n+        observation, reward, done, _ = env.step(action)\n+        action, done = agent.act(session, observation, reward, done, episode)\n+\n+  env.close()\n+  return agent.score()\n+\n+\n+class Agent:\n+\n+  def __init__(\n+    self,\n+    session,\n+    neural_net,\n+    action_space_dim,\n+    minibatch_size,\n+    discount_factor,\n+    epsilon_decay_steps\n+  ):\n+\n+    self._neural_net = neural_net\n+    self._action_space_dim = action_space_dim\n+    self._minibatch_size = minibatch_size\n+    self._discount_factor = discount_factor\n+\n+    self._epsilon = 1.0\n+    self._final_epsilon = 0.1\n+    self._epsilon_decay = (self._epsilon - self._final_epsilon) / epsilon_decay_steps\n+    self._episodes_pure_exploration = 25\n+\n+    self._num_rewards_to_average = 100\n+    self._replay_memory_size = 1000000\n+\n+    self._timesteps = 0\n+    self._total_reward = 0.0\n+    self._rewards_list = []\n+    self._replay_buffer = []\n+    self._last_action = None\n+    self._last_state = None\n+\n+    # Our objective metric\n+    self._best_average = None\n+\n+  def score(self):\n+    return self._best_average\n+\n+  def act(self, session, obs, reward, done, episode):\n+\n+    self._total_reward += reward\n+    self._timesteps += 1\n+\n+    # Putting a limit on how long the a single trial can run for simplicity\n+    if self._timesteps >= MAX_TIMESTEPS:\n+      done = True\n+\n+    if done:\n+      # Record cumulative reward of trial\n+      self._rewards_list.append(self._total_reward)\n+      average = np.mean(self._rewards_list[-self._num_rewards_to_average:])\n+\n+      if len(self._rewards_list) >= self._num_rewards_to_average and (self._best_average is None or self._best_average < average):\n+        self._best_average = average\n+\n+      if self._epsilon > self._final_epsilon:\n+        self._epsilon -= self._epsilon_decay\n+\n+      print ('Episode', episode, 'Reward', self._total_reward, 'Average Reward', round(average, 2))\n+      self._total_reward = 0.0\n+      self._timesteps = 0\n+\n+    current_state = obs.reshape((1, len(obs)))\n+\n+    # Initialize the last state and action\n+    if self._last_state is None:\n+      self._last_state = current_state\n+      q_values = self._neural_net.predict(session, self._last_state)\n+      best_action = np.argmax(q_values)\n+      self._last_action = np.zeros(self._action_space_dim)\n+      self._last_action[best_action] = 1\n+      return best_action, done\n+\n+    # Store the current step\n+    new_step = [\n+      self._last_state.copy(),\n+      self._last_action.copy(),\n+      reward,\n+      current_state.copy(),\n+      done\n+    ]\n+    self._replay_buffer.append(new_step)\n+    self._last_state = current_state.copy()\n+\n+    # If the buffer is full, remove the oldest step\n+    while len(self._replay_buffer) >= self._replay_memory_size:\n+      self._replay_buffer.pop(0)\n+\n+    # Choose random actions during pure exploration\n+    if episode < self._episodes_pure_exploration:\n+      best_action = np.random.randint(0, self._action_space_dim)\n+    else:\n+      self._train(session)\n+      # Use epsilon-greedy policy to choose best action\n+      if np.random.random() > self._epsilon:\n+        q_values = self._neural_net.predict(session, self._last_state)\n+        best_action = np.argmax(q_values)\n+      else:\n+        best_action = np.random.randint(0, self._action_space_dim)\n+\n+    next_action = np.zeros(self._action_space_dim)\n+    next_action[best_action] = 1\n+    self._last_action = next_action\n+\n+    return best_action, done\n+\n+  def _train(self, session):\n+\n+    # Randomly sample from saved states\n+    permutations = np.random.permutation(len(self._replay_buffer))[:self._minibatch_size]\n+    minibatch = [self._replay_buffer[i] for i in permutations]\n+\n+    previous_states = np.concatenate([step[0] for step in minibatch])\n+    actions = [step[1] for step in minibatch]\n+    rewards = np.array([step[2] for step in minibatch]).astype('float')\n+    current_states = np.concatenate([step[3] for step in minibatch])\n+    done = np.array([step[4] for step in minibatch]).astype('bool')\n+\n+    # Current Q-values of the sampled states\n+    q_values = self._neural_net.predict(session, current_states)\n+\n+    # Calculate target Q-values\n+    target_q_values = rewards.copy()\n+    target_q_values += ((1. - done) * self._discount_factor * q_values.max(axis=1))\n+\n+    # Update the Q function with new information\n+    self._neural_net.fit(session, previous_states, actions, target_q_values)\n+\n+\n+class QNetwork:\n+\n+  def __init__(self, layer_dims, assignments):","path":"reinforcement-learning/dqn.py","position":250,"original_position":250,"commit_id":"6383bf824f36207bcaa93097a29d9d7df8955af5","original_commit_id":"6383bf824f36207bcaa93097a29d9d7df8955af5","user":{"login":"alexandraj777","id":913838,"avatar_url":"https://avatars.githubusercontent.com/u/913838?v=3","gravatar_id":"","url":"https://api.github.com/users/alexandraj777","html_url":"https://github.com/alexandraj777","followers_url":"https://api.github.com/users/alexandraj777/followers","following_url":"https://api.github.com/users/alexandraj777/following{/other_user}","gists_url":"https://api.github.com/users/alexandraj777/gists{/gist_id}","starred_url":"https://api.github.com/users/alexandraj777/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alexandraj777/subscriptions","organizations_url":"https://api.github.com/users/alexandraj777/orgs","repos_url":"https://api.github.com/users/alexandraj777/repos","events_url":"https://api.github.com/users/alexandraj777/events{/privacy}","received_events_url":"https://api.github.com/users/alexandraj777/received_events","type":"User","site_admin":false},"body":"why use `assignments` instead of `initial_weight_stddev, initial_bias_stddev, ...` as parameters?","created_at":"2016-12-05T20:06:26Z","updated_at":"2016-12-05T20:07:46Z","html_url":"https://github.com/sigopt/sigopt-examples/pull/63#discussion_r90944778","pull_request_url":"https://api.github.com/repos/sigopt/sigopt-examples/pulls/63","_links":{"self":{"href":"https://api.github.com/repos/sigopt/sigopt-examples/pulls/comments/90944778"},"html":{"href":"https://github.com/sigopt/sigopt-examples/pull/63#discussion_r90944778"},"pull_request":{"href":"https://api.github.com/repos/sigopt/sigopt-examples/pulls/63"}}},"pull_request":{"url":"https://api.github.com/repos/sigopt/sigopt-examples/pulls/63","id":96592674,"html_url":"https://github.com/sigopt/sigopt-examples/pull/63","diff_url":"https://github.com/sigopt/sigopt-examples/pull/63.diff","patch_url":"https://github.com/sigopt/sigopt-examples/pull/63.patch","issue_url":"https://api.github.com/repos/sigopt/sigopt-examples/issues/63","number":63,"state":"open","locked":false,"title":"Reinforcement learning","user":{"login":"oliviakim95","id":7674322,"avatar_url":"https://avatars.githubusercontent.com/u/7674322?v=3","gravatar_id":"","url":"https://api.github.com/users/oliviakim95","html_url":"https://github.com/oliviakim95","followers_url":"https://api.github.com/users/oliviakim95/followers","following_url":"https://api.github.com/users/oliviakim95/following{/other_user}","gists_url":"https://api.github.com/users/oliviakim95/gists{/gist_id}","starred_url":"https://api.github.com/users/oliviakim95/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/oliviakim95/subscriptions","organizations_url":"https://api.github.com/users/oliviakim95/orgs","repos_url":"https://api.github.com/users/oliviakim95/repos","events_url":"https://api.github.com/users/oliviakim95/events{/privacy}","received_events_url":"https://api.github.com/users/oliviakim95/received_events","type":"User","site_admin":false},"body":"@pfhayes @alexandraj777 @baieric ","created_at":"2016-12-05T19:26:21Z","updated_at":"2016-12-05T20:07:46Z","closed_at":null,"merged_at":null,"merge_commit_sha":"74f967c01004a0a1c33583a637c374e3bb54dbe9","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/sigopt/sigopt-examples/pulls/63/commits","review_comments_url":"https://api.github.com/repos/sigopt/sigopt-examples/pulls/63/comments","review_comment_url":"https://api.github.com/repos/sigopt/sigopt-examples/pulls/comments{/number}","comments_url":"https://api.github.com/repos/sigopt/sigopt-examples/issues/63/comments","statuses_url":"https://api.github.com/repos/sigopt/sigopt-examples/statuses/6383bf824f36207bcaa93097a29d9d7df8955af5","head":{"label":"sigopt:reinforcement-learning","ref":"reinforcement-learning","sha":"6383bf824f36207bcaa93097a29d9d7df8955af5","user":{"login":"sigopt","id":8949269,"avatar_url":"https://avatars.githubusercontent.com/u/8949269?v=3","gravatar_id":"","url":"https://api.github.com/users/sigopt","html_url":"https://github.com/sigopt","followers_url":"https://api.github.com/users/sigopt/followers","following_url":"https://api.github.com/users/sigopt/following{/other_user}","gists_url":"https://api.github.com/users/sigopt/gists{/gist_id}","starred_url":"https://api.github.com/users/sigopt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sigopt/subscriptions","organizations_url":"https://api.github.com/users/sigopt/orgs","repos_url":"https://api.github.com/users/sigopt/repos","events_url":"https://api.github.com/users/sigopt/events{/privacy}","received_events_url":"https://api.github.com/users/sigopt/received_events","type":"Organization","site_admin":false},"repo":{"id":31243079,"name":"sigopt-examples","full_name":"sigopt/sigopt-examples","owner":{"login":"sigopt","id":8949269,"avatar_url":"https://avatars.githubusercontent.com/u/8949269?v=3","gravatar_id":"","url":"https://api.github.com/users/sigopt","html_url":"https://github.com/sigopt","followers_url":"https://api.github.com/users/sigopt/followers","following_url":"https://api.github.com/users/sigopt/following{/other_user}","gists_url":"https://api.github.com/users/sigopt/gists{/gist_id}","starred_url":"https://api.github.com/users/sigopt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sigopt/subscriptions","organizations_url":"https://api.github.com/users/sigopt/orgs","repos_url":"https://api.github.com/users/sigopt/repos","events_url":"https://api.github.com/users/sigopt/events{/privacy}","received_events_url":"https://api.github.com/users/sigopt/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/sigopt/sigopt-examples","description":"Optimization Examples with SigOpt","fork":false,"url":"https://api.github.com/repos/sigopt/sigopt-examples","forks_url":"https://api.github.com/repos/sigopt/sigopt-examples/forks","keys_url":"https://api.github.com/repos/sigopt/sigopt-examples/keys{/key_id}","collaborators_url":"https://api.github.com/repos/sigopt/sigopt-examples/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/sigopt/sigopt-examples/teams","hooks_url":"https://api.github.com/repos/sigopt/sigopt-examples/hooks","issue_events_url":"https://api.github.com/repos/sigopt/sigopt-examples/issues/events{/number}","events_url":"https://api.github.com/repos/sigopt/sigopt-examples/events","assignees_url":"https://api.github.com/repos/sigopt/sigopt-examples/assignees{/user}","branches_url":"https://api.github.com/repos/sigopt/sigopt-examples/branches{/branch}","tags_url":"https://api.github.com/repos/sigopt/sigopt-examples/tags","blobs_url":"https://api.github.com/repos/sigopt/sigopt-examples/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/sigopt/sigopt-examples/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/sigopt/sigopt-examples/git/refs{/sha}","trees_url":"https://api.github.com/repos/sigopt/sigopt-examples/git/trees{/sha}","statuses_url":"https://api.github.com/repos/sigopt/sigopt-examples/statuses/{sha}","languages_url":"https://api.github.com/repos/sigopt/sigopt-examples/languages","stargazers_url":"https://api.github.com/repos/sigopt/sigopt-examples/stargazers","contributors_url":"https://api.github.com/repos/sigopt/sigopt-examples/contributors","subscribers_url":"https://api.github.com/repos/sigopt/sigopt-examples/subscribers","subscription_url":"https://api.github.com/repos/sigopt/sigopt-examples/subscription","commits_url":"https://api.github.com/repos/sigopt/sigopt-examples/commits{/sha}","git_commits_url":"https://api.github.com/repos/sigopt/sigopt-examples/git/commits{/sha}","comments_url":"https://api.github.com/repos/sigopt/sigopt-examples/comments{/number}","issue_comment_url":"https://api.github.com/repos/sigopt/sigopt-examples/issues/comments{/number}","contents_url":"https://api.github.com/repos/sigopt/sigopt-examples/contents/{+path}","compare_url":"https://api.github.com/repos/sigopt/sigopt-examples/compare/{base}...{head}","merges_url":"https://api.github.com/repos/sigopt/sigopt-examples/merges","archive_url":"https://api.github.com/repos/sigopt/sigopt-examples/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/sigopt/sigopt-examples/downloads","issues_url":"https://api.github.com/repos/sigopt/sigopt-examples/issues{/number}","pulls_url":"https://api.github.com/repos/sigopt/sigopt-examples/pulls{/number}","milestones_url":"https://api.github.com/repos/sigopt/sigopt-examples/milestones{/number}","notifications_url":"https://api.github.com/repos/sigopt/sigopt-examples/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/sigopt/sigopt-examples/labels{/name}","releases_url":"https://api.github.com/repos/sigopt/sigopt-examples/releases{/id}","deployments_url":"https://api.github.com/repos/sigopt/sigopt-examples/deployments","created_at":"2015-02-24T03:29:25Z","updated_at":"2016-12-05T19:55:39Z","pushed_at":"2016-12-05T19:26:21Z","git_url":"git://github.com/sigopt/sigopt-examples.git","ssh_url":"git@github.com:sigopt/sigopt-examples.git","clone_url":"https://github.com/sigopt/sigopt-examples.git","svn_url":"https://github.com/sigopt/sigopt-examples","homepage":null,"size":2495,"stargazers_count":88,"watchers_count":88,"language":"Jupyter Notebook","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":17,"mirror_url":null,"open_issues_count":1,"forks":17,"open_issues":1,"watchers":88,"default_branch":"master"}},"base":{"label":"sigopt:master","ref":"master","sha":"31e00761665730e502e962c2419886d1bb47a348","user":{"login":"sigopt","id":8949269,"avatar_url":"https://avatars.githubusercontent.com/u/8949269?v=3","gravatar_id":"","url":"https://api.github.com/users/sigopt","html_url":"https://github.com/sigopt","followers_url":"https://api.github.com/users/sigopt/followers","following_url":"https://api.github.com/users/sigopt/following{/other_user}","gists_url":"https://api.github.com/users/sigopt/gists{/gist_id}","starred_url":"https://api.github.com/users/sigopt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sigopt/subscriptions","organizations_url":"https://api.github.com/users/sigopt/orgs","repos_url":"https://api.github.com/users/sigopt/repos","events_url":"https://api.github.com/users/sigopt/events{/privacy}","received_events_url":"https://api.github.com/users/sigopt/received_events","type":"Organization","site_admin":false},"repo":{"id":31243079,"name":"sigopt-examples","full_name":"sigopt/sigopt-examples","owner":{"login":"sigopt","id":8949269,"avatar_url":"https://avatars.githubusercontent.com/u/8949269?v=3","gravatar_id":"","url":"https://api.github.com/users/sigopt","html_url":"https://github.com/sigopt","followers_url":"https://api.github.com/users/sigopt/followers","following_url":"https://api.github.com/users/sigopt/following{/other_user}","gists_url":"https://api.github.com/users/sigopt/gists{/gist_id}","starred_url":"https://api.github.com/users/sigopt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sigopt/subscriptions","organizations_url":"https://api.github.com/users/sigopt/orgs","repos_url":"https://api.github.com/users/sigopt/repos","events_url":"https://api.github.com/users/sigopt/events{/privacy}","received_events_url":"https://api.github.com/users/sigopt/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/sigopt/sigopt-examples","description":"Optimization Examples with SigOpt","fork":false,"url":"https://api.github.com/repos/sigopt/sigopt-examples","forks_url":"https://api.github.com/repos/sigopt/sigopt-examples/forks","keys_url":"https://api.github.com/repos/sigopt/sigopt-examples/keys{/key_id}","collaborators_url":"https://api.github.com/repos/sigopt/sigopt-examples/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/sigopt/sigopt-examples/teams","hooks_url":"https://api.github.com/repos/sigopt/sigopt-examples/hooks","issue_events_url":"https://api.github.com/repos/sigopt/sigopt-examples/issues/events{/number}","events_url":"https://api.github.com/repos/sigopt/sigopt-examples/events","assignees_url":"https://api.github.com/repos/sigopt/sigopt-examples/assignees{/user}","branches_url":"https://api.github.com/repos/sigopt/sigopt-examples/branches{/branch}","tags_url":"https://api.github.com/repos/sigopt/sigopt-examples/tags","blobs_url":"https://api.github.com/repos/sigopt/sigopt-examples/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/sigopt/sigopt-examples/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/sigopt/sigopt-examples/git/refs{/sha}","trees_url":"https://api.github.com/repos/sigopt/sigopt-examples/git/trees{/sha}","statuses_url":"https://api.github.com/repos/sigopt/sigopt-examples/statuses/{sha}","languages_url":"https://api.github.com/repos/sigopt/sigopt-examples/languages","stargazers_url":"https://api.github.com/repos/sigopt/sigopt-examples/stargazers","contributors_url":"https://api.github.com/repos/sigopt/sigopt-examples/contributors","subscribers_url":"https://api.github.com/repos/sigopt/sigopt-examples/subscribers","subscription_url":"https://api.github.com/repos/sigopt/sigopt-examples/subscription","commits_url":"https://api.github.com/repos/sigopt/sigopt-examples/commits{/sha}","git_commits_url":"https://api.github.com/repos/sigopt/sigopt-examples/git/commits{/sha}","comments_url":"https://api.github.com/repos/sigopt/sigopt-examples/comments{/number}","issue_comment_url":"https://api.github.com/repos/sigopt/sigopt-examples/issues/comments{/number}","contents_url":"https://api.github.com/repos/sigopt/sigopt-examples/contents/{+path}","compare_url":"https://api.github.com/repos/sigopt/sigopt-examples/compare/{base}...{head}","merges_url":"https://api.github.com/repos/sigopt/sigopt-examples/merges","archive_url":"https://api.github.com/repos/sigopt/sigopt-examples/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/sigopt/sigopt-examples/downloads","issues_url":"https://api.github.com/repos/sigopt/sigopt-examples/issues{/number}","pulls_url":"https://api.github.com/repos/sigopt/sigopt-examples/pulls{/number}","milestones_url":"https://api.github.com/repos/sigopt/sigopt-examples/milestones{/number}","notifications_url":"https://api.github.com/repos/sigopt/sigopt-examples/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/sigopt/sigopt-examples/labels{/name}","releases_url":"https://api.github.com/repos/sigopt/sigopt-examples/releases{/id}","deployments_url":"https://api.github.com/repos/sigopt/sigopt-examples/deployments","created_at":"2015-02-24T03:29:25Z","updated_at":"2016-12-05T19:55:39Z","pushed_at":"2016-12-05T19:26:21Z","git_url":"git://github.com/sigopt/sigopt-examples.git","ssh_url":"git@github.com:sigopt/sigopt-examples.git","clone_url":"https://github.com/sigopt/sigopt-examples.git","svn_url":"https://github.com/sigopt/sigopt-examples","homepage":null,"size":2495,"stargazers_count":88,"watchers_count":88,"language":"Jupyter Notebook","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":17,"mirror_url":null,"open_issues_count":1,"forks":17,"open_issues":1,"watchers":88,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/sigopt/sigopt-examples/pulls/63"},"html":{"href":"https://github.com/sigopt/sigopt-examples/pull/63"},"issue":{"href":"https://api.github.com/repos/sigopt/sigopt-examples/issues/63"},"comments":{"href":"https://api.github.com/repos/sigopt/sigopt-examples/issues/63/comments"},"review_comments":{"href":"https://api.github.com/repos/sigopt/sigopt-examples/pulls/63/comments"},"review_comment":{"href":"https://api.github.com/repos/sigopt/sigopt-examples/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/sigopt/sigopt-examples/pulls/63/commits"},"statuses":{"href":"https://api.github.com/repos/sigopt/sigopt-examples/statuses/6383bf824f36207bcaa93097a29d9d7df8955af5"}}}}
{"actor":{"display_login":"alexandraj777"}}