Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions command_anaconda_prompt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
%windir%\System32\cmd.exe "/K" C:\ProgramData\Anaconda3\Scripts\activate.bat C:\ProgramData\Anaconda3
2 changes: 2 additions & 0 deletions reaver/agents/random.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ def __init__(self, act_spec, n_envs):

def get_action(self, obs):
function_id = [np.random.choice(np.argwhere(obs[2][i] > 0).flatten()) for i in range(self.n_envs)]
# Va pour les n_env selectionner vraisemblablement? a chaque fois un carré parmi les 16 ou il y a une unité.
args = [[[np.random.randint(0, size) for size in arg.shape] for _ in range(self.n_envs)]
for arg in self.act_spec.spaces[1:]]
return [function_id] + args

4 changes: 4 additions & 0 deletions reaver/envs/base/abc.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ class Env(ABC):

Note: observation / action specs contain a list of spaces,
this is implicitly assumed across all Reaver components


Abstract est un cahier des charges, si à l'intérieur de SC2Env il n'y a pas de définition des fonctions start, step etc, il y aura un message d'erreur
SC2Env hérite de Env, Env étant la class cahier des charges définie ici.
"""
def __init__(self, _id: str, render=False, reset_done=True, max_ep_len=None):
self.id = _id
Expand Down
6 changes: 4 additions & 2 deletions reaver/envs/sc2.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ def __init__(
render=False,
reset_done=True,
max_ep_len=None,
spatial_dim=16,
step_mul=8,
spatial_dim=32, #bitmap size
step_mul=8, #frame rate
obs_features=None,
action_ids=ACTIONS_MINIGAMES
):
Expand Down Expand Up @@ -239,6 +239,7 @@ def __call__(self, action):
args.append([defaults[arg_name]])

return [actions.FunctionCall(fn_id, args)]
#renvoie fn id et arg pour le fn_id utilisés

def make_spec(self, spec):
spec = spec[0]
Expand Down Expand Up @@ -270,6 +271,7 @@ def __init__(self, func_ids, args):
for fn_id in func_ids:
fn_id_args = [arg_type.name for arg_type in actions.FUNCTIONS[fn_id].args]
self.args_mask.append([arg in fn_id_args for arg in args])
#ajoute arg à args_mask si arg est dans fn_id_args. Vecteur de type [[False, ...],...,[True,False..]]


def get_spatial_dims(feat_names, feats):
Expand Down
8 changes: 7 additions & 1 deletion reaver/models/base/policy.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,20 @@ def __init__(self, act_spec, logits):
self.logli = sum([dist.log_prob(act) for dist, act in zip(self.dists, self.inputs)])

self.sample = [dist.sample() for dist in self.dists]

# Sample 1 à 1 les différentes éléments qui constitueront le vecteur action en output via self.dists
#
@staticmethod
def make_dist(space, logits):
"""Va permettre de déterminer les lois de probabilités dans le cas discret / continu pour les utiliser ensuite
dans self.sample"""

# tfp is really heavy on init, better to lazy load
import tensorflow_probability as tfp

if space.is_continuous():
mu, logstd = tf.split(logits, 2, axis=-1)
#Le split permet de couper en deux vu qu'on suppose que la matrice de covariance est diagonale.
#Mu et logstd ont donc même taille et logits peut être séparé en deux vecteurs de meme taille via split.
return tfp.distributions.MultivariateNormalDiag(mu, tf.exp(logstd))
else:
return tfp.distributions.Categorical(logits)
25 changes: 19 additions & 6 deletions reaver/models/sc2/fully_conv.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import tensorflow as tf
from tensorflow.keras import Model
from tensorflow.keras.initializers import VarianceScaling
from tensorflow.keras.layers import Input, Concatenate, Dense, Embedding, Conv2D, Flatten, Lambda
from tensorflow.keras.layers import Input, Concatenate, Dense, Embedding, Conv2D, Flatten, Lambda, LSTM
from reaver.models.base.layers import Squeeze, Split, Transpose, Log, Broadcast2D


Expand All @@ -29,12 +29,25 @@ def build_fully_conv(obs_spec, act_spec, data_format='channels_first', broadcast
value = Squeeze(axis=-1)(value)

logits = []
lstm = LSTM(1024)
for space in act_spec:
if space.is_spatial():
logits.append(Conv2D(1, 1, **conv_cfg(data_format, scale=0.1))(state))
logits[-1] = Flatten()(logits[-1])
else:
logits.append(Dense(space.size(), **dense_cfg(scale=0.1))(fc))
print('space: {}, spatial: {}'.format(space, space.is_spatial()))
with tf.name_scope(space.name):
if space.is_spatial():
logits.append(Conv2D(1, 1, **conv_cfg(data_format, scale=0.1))(state))
logits[-1] = Flatten()(logits[-1])
#print(logits[-1].shape)
from tensorflow.keras.layers import Reshape
logits[-1] = Reshape((1,logits[-1].shape[1]))(logits[-1])
#logits[-1] = Dense(1024, **dense_cfg(scale=0.1))(logits[-1])

#state = lstm.zero_state(1, dtype=tf.float32)
#output, state = lstm(logits[-1], state)
#logits[-1]=output
logits[-1] = LSTM(1024)(logits[-1])
print(logits[-1].shape)
else:
logits.append(Dense(space.size(), **dense_cfg(scale=0.1))(fc))

mask_actions = Lambda(
lambda x: tf.where(non_spatial_inputs[0] > 0, x, -1000 * tf.ones_like(x)),
Expand Down