Skip to content
/ TAP-Net Public

TAP-Net: Transport-and-Pack using Reinforcement Learning

License

Notifications You must be signed in to change notification settings

Juzhan/TAP-Net

Repository files navigation

TAP-Net: Transport and Packing network

File structure:

data/
pack/
compare/    <--- place to draw the table
p/          <--- some models we trained before

tools.py
generate.py
model.py
pack.py
train.py

tools.py: consists of 3 parts: painting functions, packing functions and feasibility functions

generate.py: use to generate training data

model.py: define the network sturcture

pack.py: update dymanic data and calculate reward value

train.py: the main code of this work, loading data and train the network, we set some args to contorll the training

some important args

    --nodes: the number of blocks
    --batch_size: batch size, default as 128
    --train_size: the number of training data
    --valid_size: the number of testing data
    --epoch_num: epoch num
    --checkpoint: the location of pre-trained network model, if the path for a model of network is "./netwrok/model/actor.pt", then the checkpoint should be "./network/model/"

    --use_cuda: default as True
    --cuda: the ids of GPU you want to use

    --obj_dim: the block's dimension
    --reward_type: the reward type you want to use:
        'comp', 'soft', 'hard', 'pyrm', 'pymr-soft', 'pyrm-hard'
    --input_type: the data type you want to use:
        'simple', 'rot', 'bot', 'mul', 'mul-with'
        more detial you can go to pack.py > PACKDataset 
    --allow_rot: True if you want to rotation
    --container_width: the target container width, for 2D, the container size will be container_width x inf, for 3D, the container size will be container_width x container_width x inf
        
    --mix_data: Ture if you want to trian/test on mix dataset
    --gt_data: Ture if you want to trian/test on gt dataset

    --min_size:
    --max_size:
    --initial_container_width:

    --encoder_hidden_size:
    --decoder_hidden_size:

    --just_test: Ture if you want to test a network, False if you want to train a network
    --just_generate: True if you want to generate some data, False otherwise
    --note: any words you want to say, when the train.py is running, it will create a folder under pack/ to store the result, and the note string will be a part of the folder's name

Example:

python trainer.py --just_test=False --valid_size=10 --train_size=128000 --epoch_num=50 \
    --mix_data=False \
    --gt_data=True \
    --container_width=9 \
    --cuda=2 \
    --nodes=10 \
    --note=*some-useless-words* \
    --input_type=bot \
    --reward_type=comp \
    --allow_rot=True \
    --obj_dim=2 \

This command means you want to train the network in 2D condition, using the gt dataset, the training data size is 128000, the task is packing 10 blocks into a container, the container size is 9 x inf, reward type is 'comp', and the constrain of the packing is robot feasibility (--input_type=bot)

Then it will generate a folder unber pack/ folder to store the training or testing result. The folder structure of pack looks like this:

pack/
    10/  <--- nodes=10
        2d-bot-comp-note-*some-useless-words*-2019-12-xx-xx-xx/ <--- the folder create by our code
            checkpoints/    <--- store models of each epoch
                0/          <--- the epoch num
                1/
                ...
            render/         <--- store the testing result of each epoch
                0/  
                1/
                ...

The data/ folder contain the training and testing data, *_gt/ means the gt dataset, and *_bot/ means the random dataset. The folder structure of pack looks like this:

data/
    pack_2d_bot/
        pack-train-5-10/
            blocks.txt      <--- blocks data, container each rotation type
            dep_move.txt    <--- movement dependency
            dep_large.txt   <--- rotation dependency of large size
            dep_small.txt   <--- rotation dependency of small size
            container.txt   <--- only use in multi-target container task, just some random generated target container id for blocks

Under these folders, we have many kinds for dataset, pack_train_10_1000 means the training dataset with 1000 data, each data has 10 blocks, pack_valid_5_10 means the testing dataset with 10 data, each data has 5 blocks.

About

TAP-Net: Transport-and-Pack using Reinforcement Learning

Resources

License

Stars

Watchers

Forks