Инструментальная среда имитационного моделирования распределенных систем мобильных агентов



страница19/21
Дата24.11.2016
Размер2.3 Mb.
Просмотров4016
Скачиваний0
1   ...   13   14   15   16   17   18   19   20   21

Приложение 31 Model_log.cs


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Collections;
namespace Automata {

partial class Model {


public static int page_length = 900;

static double max_time;

public static int title_length = 50;

public static int gap = 30;


public bool log_total() {

if(t_current <= 0) {

log(ml["show_of_rezults"]/*"Показ итогов невозможен: t_current="*/ + t_current + ml["time_doesn't move"]/*" - время не продвинулось."*/);

return false;

}

log(ml["=REZULTS="]/*"==================== ИТОГИ ============="*/);



max_time = t_current;

StringBuilder sb;

sb = new StringBuilder(new string(' ', page_length));

for(int i = 0; i < page_length - gap; i += gap) {

double time_i = max_time / page_length * i;

sb.Insert(i, String.Format("|<-{0:f}сек.", time_i));

}

string fin = string.Format("max {0:f}сек.->|",max_time);



sb.Insert(page_length - fin.Length, fin);

string line_x = sb.ToString().Substring(0,page_length);


foreach (Const con in Constants.Values) {

if(con.type.list_states.Count <= 0) {

continue; // если у типа нет состояний, то нечего показывать

}

log("..");



int n = 0;

double time = 0;

sb = new StringBuilder(new string(' ',title_length));

sb.Insert(2, "============= Const " + con.name+" =============");

string title = sb.ToString().Substring(0, title_length);

string ss = title + line_x;

//log("ss.length=" + ss.Length);

log(ss);


foreach (State state in con.type.list_states) {

sb = new StringBuilder(new String(' ', page_length));

int st_n = 0;

double st_time = 0;

foreach (int n_trace in n_trace_list) {

Trace trace = (Trace) trace_hash[n_trace];

// foreach (Trace trace in trace_hash.Values) {

if (trace.con == con && trace.state == state) {

st_n++;

double time_finish = trace.time_finish;



if(time_finish == -1) time_finish = t_current;

if (time_finish > 0) {

st_time += time_finish - trace.time_start;

}

double d = page_length * trace.time_start/max_time;



int beg = (int)d;

d = page_length * (time_finish - trace.time_start) / max_time;

int len = (int) d;

sb.Insert(beg, new string(state.symbol, len));

}

}

string time_line = sb.ToString().Substring(0,page_length);


sb = new StringBuilder(new string(' ', title_length));

sb.Insert(0, "" + state.name + " (" + st_n + "; " + st_time+"сек.)");

title = sb.ToString().Substring(0, title_length);
log(title + time_line);
n += st_n;

time += st_time;

}

foreach (Transition trans in con.type.list_trans) {



sb = new StringBuilder(new String(' ', page_length));

int tr_n = 0;

double tr_time = 0;

foreach (int n_trace in n_trace_list) {

Trace trace = (Trace) trace_hash[n_trace];

// foreach (Trace trace in trace_hash.Values) {

if (trace.con == con && trace.trans == trans) {

tr_n++;


double time_finish = trace.time_finish;

if(time_finish == -1) time_finish = t_current;

if(time_finish > 0) {

tr_time += time_finish - trace.time_start;

}

double d = page_length * trace.time_start / max_time;



int beg = (int)d;

d = page_length * (time_finish - trace.time_start) / max_time;

int len = (int)d;

/*


log("n_start=" + trace.n_start + " time_start=" + trace.time_start

+ " time_fnish=" + time_finish);

log("beg=" + beg + " len=" + len);

*/


sb.Insert(beg, new string(trans.symbol, len));

// sb = new StringBuilder(sb.ToString().Substring(0,page_length));

}

}

string time_line = sb.ToString().Substring(0, page_length);


sb = new StringBuilder(new string(' ', title_length));

sb.Insert(0, "" + trans.name + " (" + tr_n + "; " + tr_time+"сек.)");

title = sb.ToString().Substring(0, title_length);
log(title + time_line);

/*

log("..trans: " + trans.state_from.name + " -> "



+ trans.state_to.name + " n=" + tr_n + " time=" + tr_time);

*/


n += tr_n;

time += tr_time;

}

log(ml["total_po_const"]/*"Итого по const "*/ + con.name+": n="+n+", time="+time+ml["sec"]/*"сек."*/);



}

return true;

}
public void log_trace() {

log_t(".");

log_t(".");

for (int i = 0; i < trace_hash.Count; i++) {

Trace t = (Trace)trace_hash[i];

string ss = t.show();

log_t(ss);

}

}


public void show_rezult(){

rez(ml["performance_time"]/*"Время выполнения "*/ + t_current + ml["number_of_steps"]/*", число шагов "*/+n_trace);

//Достижимость

if (test_marking) {

rez("");

rez(ml["r_reachability"]/*"Достижимость:"*/);

foreach (Object obj in markings.Values) {

Marking mark = (Marking)obj;

rez(ml[" Marking "]/*" Разметка "*/ + mark.name

+ ml["reached"]/*" достигнута "*/ + mark.count + ml["times"]/*" раз"*/);

}

}

//Ограниченность



if(test_bounds) {

rez("");


rez(ml["Boundedness:"]/*"Ограниченность:"*/);

foreach(Bound bound in bound_list) {

rez(ml["bound"]/*" Ограничение "*/ + bound.name + ": \t"

+ (bound.max_value <= bound.limit ? ml["yes"]/*"да"*/ : ml["no"]/*"нет"*/ )

+ " ("+bound.max_value+")"

);

}



}
//Наличие тупиковых ситуаций

if(true /* test_lock*/ ) {

rez("");

rez(ml["presence_od_deadlocks"]/*"Наличие тупиковых ситуаций: "*/

+ (m.Exec_Mode == Exec_Mode_Stop ? ml["yes"]/*"да"*/ : ml["no"]/*"нет"*/)

);

}


//Считаем переходы

List list_trans = new List();

int n_trans = 0;

foreach (Type typ in t_list) {

foreach (Transition trans in typ.list_trans) {

list_trans.Add(trans);

n_trans++;

}

}



int[] trans_count_arr = new int[n_trans];
//Считаем дуги

int n_arc=0;

List list_arc = new List();

foreach(Place p in p_list){

foreach(Arc a in p.list_in){

n_arc++;


list_arc.Add(a);

}

foreach(Arc a in p.list_out){



n_arc++;

list_arc.Add(a);

}

}

int[] arc_count_arr = new int[n_arc];


// Статистика по агентам, берется из трассировки trace_hash

Hashtable agents = new Hashtable();

AgentTotal agent_total = null;

foreach (int n in n_trace_list) {

Trace trace = (Trace)trace_hash[n];

Const con = trace.con;

double step_time = (trace.time_finish == -1.0 ? t_current : trace.time_finish)

- trace.time_start;

if (agents.Contains(con)) {

agent_total = (AgentTotal) agents[con];

} else {

agent_total = new AgentTotal();

agent_total.con = con;

agent_total.state_count_posible = con.type.list_states.Count;

agent_total.trans_count_posible = con.type.list_trans.Count;

foreach (State state in con.type.list_states) {

AgentStateTotal astot = new AgentStateTotal();

astot.state = state;

agent_total.states.Add(state, astot);

}

foreach (Transition trans in con.type.list_trans) {



AgentTransTotal attot = new AgentTransTotal();

attot.trans = trans;

agent_total.transes.Add(trans, attot);

}

agents.Add(con, agent_total);



}

if (trace.trans != null) {

int i_trans = list_trans.IndexOf(trace.trans);

trans_count_arr[i_trans]++;

if (trace.step != null) {

int i_arc;

foreach (Object obj in trace.step.Binds.Values) {

try {


Bind b = (Bind)obj;

i_arc = list_arc.IndexOf(b.arc);

arc_count_arr[i_arc]++;

} catch (Exception e) {

log("rezult arc count from Bind, e = " + e);

log("obj=" + obj);

}

}

foreach (Outcome outcome in trace.step.Outcomes) {



i_arc = list_arc.IndexOf(outcome.arc);

arc_count_arr[i_arc]++;

}

}

agent_total.unstate_count++;



agent_total.unstate_total_time += step_time;

AgentTransTotal trans_tot = null;

if (agent_total.transes.Contains(trace.trans)) {

trans_tot = (AgentTransTotal)agent_total.transes[trace.trans];

} else {

trans_tot = new AgentTransTotal();

trans_tot.trans = trace.trans;

agent_total.transes.Add(trace.trans, trans_tot);

}

trans_tot.count++;



trans_tot.total_time += step_time;

} else if(trace.state != null){

AgentStateTotal state_tot = null;

if(agent_total.states.Contains(trace.state)){

state_tot = (AgentStateTotal) agent_total.states[trace.state];

}else{


state_tot = new AgentStateTotal();

state_tot.state = trace.state;

agent_total.states.Add(trace.state, state_tot);

}

state_tot.count++;



state_tot.total_time += step_time;

}

}



bool liveness_trans = true;

bool liveness_arc = true;

foreach (int c in trans_count_arr) {

if (c == 0) liveness_trans = false;

}

foreach (int c in arc_count_arr) {



if (c == 0) liveness_arc = false;

}

rez("");



rez(ml["Liveness"]/*"Живость: "*/ + (liveness_trans ? ml["yes"]/*"да"*/ : ml["no"]/*"нет"*/));

for (int i = 0; i < list_trans.Count; i++) {

Transition trans = list_trans[i];

rez(ml[" Transition:"]/*" Переход: "*/+trans.state_from.type.name + "/" + trans.state_from.name

+":" + trans.name

+" \t\t"+trans_count_arr[i] + " "

+ (trans_count_arr[i] == 0 ? "(!!!)" : "")

);

}



rez("");

rez(ml["liveness_by_system_net_transition"]/*"Живость по переходам системной сети: "*/ + (liveness_arc ? ml["yes"]/*"да"*/ : ml["no"]/*"нет"*/));

for (int i = 0; i < list_arc.Count; i++) {

Arc arc = list_arc[i];

string dir = (arc.in_out == Arc.IN ? "<-" : "->");

rez(ml["Arc"]/*" Дуга: "*/ + arc.p0.name + dir + arc.port.name + dir + arc.p.name

+ ": \t\t" + arc_count_arr[i] + " "

+ (arc_count_arr[i] == 0 ? "(!!!)" : "")

);

}


// Статистика по агентам

foreach (Object obj in agents.Values) {

AgentTotal atot = (AgentTotal) obj;

foreach(Object obj2 in atot.states.Values){

AgentStateTotal astot = (AgentStateTotal)obj2;

if(astot.count > 0) atot.state_count_total++;

}

foreach (Object obj2 in atot.transes.Values) {



AgentTransTotal attot = (AgentTransTotal)obj2;

if(attot.count > 0) atot.trans_count_total++;

}

rez("");


rez(ml["Agent"]/*"Агент "*/ + atot.con.name);

rez(ml["number_of_states"]/*"===Количество состояний "*/ + atot.state_count_total

+ " / " + atot.state_count_posible);

foreach (Object obj2 in atot.states.Values) {

AgentStateTotal astot = (AgentStateTotal)obj2;

rez(ml["cond"]/*" Состояние "*/ + astot.state.name

+ ml["time_total"]/*": время общее "*/ + astot.total_time

+ml["average"]/*", среднее "*/ + astot.total_time / astot.count + ml["number"]/*", кол-во "*/ +astot.count

+ (astot.count == 0 ? " (!!!)" : "")

);

}



rez(ml["number_of_transitions"]/*"===Количество переходов "*/ + atot.trans_count_total

+ " / " + atot.trans_count_posible);

foreach (Object obj2 in atot.transes.Values) {

AgentTransTotal attot = (AgentTransTotal)obj2;

rez(ml["Transition"]/*" Переход "*/ + attot.trans.name

+ ml["time_total"]/*": время общее "*/ + attot.total_time

+ ml["average"]/*", среднее "*/ + attot.total_time / attot.count + ml["number"]/*", кол-во "*/ + attot.count

+ (attot.count == 0 ? " (!!!)" : "")

);

}

/*



rez(" Время в переходах: общее " + atot.unstate_total_time

+ ", среднее " + atot.unstate_total_time / atot.unstate_count

+ ", кол-во " + atot.unstate_count

);

*/



}

}
string dump;


void d(string ss){

dump += ss+"\r\n";

}
public string get_dump() {

dump = "";

d("t_current=" + t_current + " n_trace=" + n_trace);
string ss = "";

points_list.Sort();

foreach (double t in points_list) {

string s = "";

if(points_hash.Contains(t)) {

Point p = (Point)points_hash[t];

if(p.steps.Count > 0) {

s = "hash.steps.count=" + p.steps.Count;

}

}

ss += "(" + t +s+ ")";



}
d(ss);
foreach (Instance inst in inst_list) {

if(inst.current_state != null){

int len=inst.trans_fire_time.Length;

int trans_count = inst.con.type.list_trans.Count;

d(inst.con.name+":"+inst.current_state.name + " arr_len=" + len+" trans_count="+trans_count);

foreach(Transition trans in inst.current_state.list_trans) {

d(" " + trans.name + " time="

+ (trans.id>=len? "???" : ""+inst.trans_fire_time[trans.id])

);

}

}



if(inst.current_step != null) {

Step step = inst.current_step;

d(inst.con.name + "->" + step.trans.name+ " start=" + step.start_time

+ " finish="+step.finish_time

);

}

}



return dump;

}

}



}


Каталог: data -> 2013
2013 -> Федеральное государственное автономное образовательное
2013 -> «Визуальный образ персонажей массового кинематогрфа в историческом контексте»
2013 -> 2 раздел анализ предметной области 5
2013 -> Магистерская диссертация
2013 -> Влияние вовлеченности на готовность платить за коллекционные товары
2013 -> Выражение гендерных характеристик в англоязычном "глянцевом" дискурсе
2013 -> Продакт Плейсмент и перспективы его развития в сети Интернет
2013 -> 1Лекции первого полугодия
2013 -> «Правовое рассмотрение компьютерного мошенничества», Ницца, 22 октября 1992 года, грамота «весьма достойно»


Поделитесь с Вашими друзьями:
1   ...   13   14   15   16   17   18   19   20   21


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал