From 4407c99b771346a4eed1b0ef74d18655e9892524 Mon Sep 17 00:00:00 2001 From: Aethor Date: Mon, 18 Jun 2018 17:35:05 +0200 Subject: [PATCH] experimental scenario generation script --- Scripts/.gitignore | 231 ++++++++++++++++++++++++++++++++++++++++++++ Scripts/generate.pl | 41 +++++--- 2 files changed, 260 insertions(+), 12 deletions(-) create mode 100644 Scripts/.gitignore mode change 100644 => 100755 Scripts/generate.pl diff --git a/Scripts/.gitignore b/Scripts/.gitignore new file mode 100644 index 0000000..bcc701e --- /dev/null +++ b/Scripts/.gitignore @@ -0,0 +1,231 @@ +# Created by .ignore support plugin (hsz.mobi) +### JetBrains template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/dictionaries +.idea/**/shelf + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# CMake +cmake-build-debug/ +cmake-build-release/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests +### Vim template +# Swap +[._]*.s[a-v][a-z] +[._]*.sw[a-p] +[._]s[a-v][a-z] +[._]sw[a-p] + +# Session +Session.vim + +# Temporary +.netrwhist +*~ +# Auto-generated tag files +tags +# Persistent undo +[._]*.un~ +### C template +# Prerequisites +*.d + +# Object files +*.o +*.ko +*.obj +*.elf + +# Linker output +*.ilk +*.map +*.exp + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ +*.su +*.idb +*.pdb + +# Kernel Module Compile Results +*.mod* +*.cmd +.tmp_versions/ +modules.order +Module.symvers +Mkfile.old +dkms.conf +### macOS template +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk +### Emacs template +# -*- mode: gitignore; -*- +*~ +\#*\# +/.emacs.desktop +/.emacs.desktop.lock +*.elc +auto-save-list +tramp +.\#* + +# Org-mode +.org-id-locations +*_archive + +# flymake-mode +*_flymake.* + +# eshell files +/eshell/history +/eshell/lastdir + +# elpa packages +/elpa/ + +# reftex files +*.rel + +# AUCTeX auto folder +/auto/ + +# cask packages +.cask/ +dist/ + +# Flycheck +flycheck_*.el + +# server auth directory +/server/ + +# projectiles files +.projectile + +# directory configuration +.dir-locals.el +### SublimeText template +# Cache files for Sublime Text +*.tmlanguage.cache +*.tmPreferences.cache +*.stTheme.cache + +# Workspace files are user-specific +*.sublime-workspace + +# Project files should be checked into the repository, unless a significant +# proportion of contributors will probably not be using Sublime Text +# *.sublime-project + +# SFTP configuration file +sftp-config.json + +# Package control specific files +Package Control.last-run +Package Control.ca-list +Package Control.ca-bundle +Package Control.system-ca-bundle +Package Control.cache/ +Package Control.ca-certs/ +Package Control.merged-ca-bundle +Package Control.user-ca-bundle +oscrypto-ca-bundle.crt +bh_unicode_properties.cache + +# Sublime-github package stores a github token in this file +# https://packagecontrol.io/packages/sublime-github +GitHub.sublime-settings + +# Scenario files +*.txt diff --git a/Scripts/generate.pl b/Scripts/generate.pl old mode 100644 new mode 100755 index 9cd9ce8..57c825e --- a/Scripts/generate.pl +++ b/Scripts/generate.pl @@ -1,27 +1,35 @@ +#!/bin/perl + use strict; use warnings; use List::Util qw/shuffle/; +die "Usage : generate.pl agents_number [floor_number]\nagents number range from 2 to 500\n" if @ARGV == 0; +my $total_nb = $ARGV[0]; +die "Error : stupid amount of agents ($total_nb)\n" if $total_nb < 2; +my $visitors_nb = int($total_nb / 2); +my $residents_nb = $total_nb - $visitors_nb; +my $floor_number = @ARGV > 2 ? $ARGV[1] : 25; + +my $visitors_output_file_name = "visitors.txt"; +my $residents_output_file_name = "residents.txt"; my $visitors_db_filename = "visitors.db"; my $residents_db_filename = "residents.db"; my @visitors = (); my @residents = (); -my $total_nb = $ARGV[0]; -my $visitors_nb = $ARGV[0]; #todo : calculer -my $residents_nb = $ARGV[1]; -my $output_file_name = $ARGV[2] eq "" ? "out" : $ARGV[2]; + open(my $visitors_db_file, $visitors_db_filename) or die "Error : no visitors database found \n"; open(my $residents_db_file, $residents_db_filename) or die "Error : no residents database found \n"; while(my $line = <$visitors_db_file>){ - #chomp($line); + chomp($line); push(@visitors, $line); } while(my $line = <$residents_db_file>){ - #chomp($line); - push(@residents, $line); + chomp($line); + push(@residents, $line) if(@residents < $residents_nb); } die "Database is not big enough for $visitors_nb visitors\n" if @visitors < $visitors_nb; @@ -30,14 +38,23 @@ die "Database is not big enough for $residents_nb residents" if @residents < $re @visitors = shuffle(@visitors); @residents = shuffle(@residents); -open(my $output_file, '>'.$output_file_name) or die "Error : couldn't create output file."; +open(my $visitors_output_file, '>', $visitors_output_file_name) or die "Error : couldn't create visitors output file."; +open(my $residents_output_file, '>', $residents_output_file_name) or die "Error : couldn't create residents output file."; -for(my $i = 0; $i < ) -foreach (@visitors){ - print; + +for(my $i = 0; $i < $visitors_nb; $i += 1){ + print $visitors_output_file $visitors[$i] . ";" . + $residents[rand $residents_nb] . "\n"; +} + +for(my $i = 0; $i < $residents_nb; $i += 1){ + print $residents_output_file $residents[$i] . ";" . + (int(rand(25)) + 1) . ";" . + (int(rand(25 + 1))) . "\n"; } close $visitors_db_file; close $residents_db_file; - +close $visitors_output_file; +close $residents_output_file;