diff --git a/.gitignore b/.gitignore index 1f44705..5724384 100644 --- a/.gitignore +++ b/.gitignore @@ -101,3 +101,4 @@ ENV/ *.pdf *.log *.gz +*.zip diff --git a/dds_simulation/experiments/consistent_partitions.py b/dds_simulation/experiments/consistent_partitions.py index 600416e..2cb17bb 100644 --- a/dds_simulation/experiments/consistent_partitions.py +++ b/dds_simulation/experiments/consistent_partitions.py @@ -8,6 +8,9 @@ class ConsistentExperiment(DDS): + """ + + """ def _form_random_partitions(self): partitions_number = int(default.parameter('experiment', 'partitions')) consistent_partitions = [] @@ -55,10 +58,6 @@ def single_iteration(self, partition, nodes_original): i = 0 consistent_partitions = self._form_partitions(partition) taking_count = 2 - found_inconsistent_counts = [0 for i in - range(0, len(consistent_partitions))] - - #for partition in consistent_partitions: nodes = deepcopy(nodes_original) random.shuffle(nodes) @@ -75,6 +74,7 @@ def multiple_partitions(self, partitions_number): nodes = [node.identity for node in self.nodes] partitions_invariants = [i + 1 for i in range(len(nodes))] + print("part inv>>> ", partitions_invariants) partitions = list( filter(lambda partition: sum(partition) == len(nodes), combinations_with_replacement( @@ -83,7 +83,7 @@ def multiple_partitions(self, partitions_number): y = [] x = [] inconsistency_array = [] - + print("patritions: ", partitions) for part in partitions: print("=========================================") print("PARTITION: ", part) @@ -96,6 +96,7 @@ def multiple_partitions(self, partitions_number): probability = sum(inconsistency_array) / len( inconsistency_array) + inconsistency_array.clear() y.append(probability) x.append(i) @@ -105,16 +106,17 @@ def multiple_partitions(self, partitions_number): # probability of inconsistency: average = sum(y) / len(y) + maximum = max(y) print(average) + print(maximum) extrapolation.draw_probability_extrapolation( - x, y, part, len(nodes), average) + x, y, part, len(nodes), average, maximum) x.clear() y.clear() return x, y def start_experiment(self): - partitions = int(default.parameter('experiment', 'partitions')) inconsistency_states = self.multiple_partitions(partitions) diff --git a/dds_simulation/experiments/link.py b/dds_simulation/experiments/link.py index 3ea6868..41d90dc 100644 --- a/dds_simulation/experiments/link.py +++ b/dds_simulation/experiments/link.py @@ -4,9 +4,10 @@ class Link(object): bandwidth = 1 - def __init__(self, node1, node2): + def __init__(self, node1, node2, weight=None): self.node1 = node1 self.node2 = node2 + self.weight = weight def transmit(self, message): return self.bandwidth diff --git a/dds_simulation/experiments/simulation.py b/dds_simulation/experiments/simulation.py index 9dd8528..865cd32 100644 --- a/dds_simulation/experiments/simulation.py +++ b/dds_simulation/experiments/simulation.py @@ -1,35 +1,79 @@ import abc import random +import networkx + from dds_simulation.experiments.node import Node from dds_simulation.experiments.link import Link from dds_simulation.experiments.dataunit import Dataunit +from dds_simulation.visualisation import graph_control, extrapolation +from dds_simulation.conf import default -class DDS(object): +class DDS(object): + """ + Base class for all experiments + """ __metaclass__ = abc.ABCMeta - def __init__(self, graph, controller, distribution, dataunits_number): + def __init__(self, graph): self.nodes = list() self.links = set() self.graph = graph - self.controller = controller - + self.nodes = [] for node_ident in graph.nodes(): neighbors = graph.neighbors(node_ident) self.nodes.append(Node(node_ident, neighbors)) for node1, node2 in graph.edges(): self.links.add(Link(node1, node2)) - - self.dataunits = DDS.generate_data(dataunits_number) - self.distribute_data(distribution) + int(default.parameter('topology', 'nodes')) @abc.abstractmethod def start_experiment(self): """Starting one of experiments""" + +class DDSMessaging(DDS): + """ + Class simulating messaging broadcasting across DDS + """ + + def __init__(self, graph, distribution, dataunits_number): + super(DDSMessaging, self).__init__(graph) + self.controller = graph_control.GraphController(graph) + self.graph = graph + self.time_slots_taken = 0 + + self.nodes = [] + + weighted = bool(default.parameter('topology', 'weighted')) + eccentricity = {} + for node1, node2 in graph.edges(): + self.links.add(Link(node1, node2)) + if weighted: + graph[node1][node2]['weight'] = random.randint(1, 9) + + for node_ident in graph.nodes(): + neighbors = graph.neighbors(node_ident) + self.nodes.append(Node(node_ident, neighbors)) + self._eccentricity(node_ident, eccentricity) + + self.diameter = networkx.diameter(graph, e=eccentricity) + + print("diameter > ", self.diameter) + + self.dataunits = DDSMessaging.generate_data(dataunits_number) + self.distribute_data(distribution) + + def _eccentricity(self, node, eccentricity): + path = networkx.single_source_dijkstra_path_length( + self.graph, node, weight='weight') + path = {k: v for k, v in path.items() + if not eccentricity.get(k) or v > eccentricity[k]} + eccentricity.update(path) + @staticmethod def generate_data(dataunits): return [Dataunit(i) for i in range(dataunits)] @@ -44,41 +88,106 @@ def distribute_data(self, distribution): for node in self.nodes: node.add_dataunits(dataunits_per_node) + def start_experiment(self): + self.simulate_message() + + def _simulate_message_single_iteration(self, node_identity, + nodes_processed): + neighbors = self.graph.neighbors(node_identity) + print("Node: ", node_identity) + print("NEIGHBORS: ", neighbors) + + # assume now that go to each node takes 1 ts, broadcasting parallel + #print("ts taken>>> ", self.time_slots_taken) + + nodes_processed.update(set(neighbors)) + nodes_processed.update(set([node_identity, ])) + return neighbors + + def _simulate_parallel_iterations(self): + pass + + def _shortest_path_for_neighbors(self, i, neighbors): + if i in neighbors: + neighbors.remove(i) + path = networkx.single_source_dijkstra_path( + self.graph, i, weight='weight') + + path.pop(i) + return [path[n][1] for n in neighbors if len(path[n]) > 1] + def simulate_message(self): """Simulate communication process. Simulate communication process starting from one of nodes. """ - dataunit_id = random.randint(0, len(self.dataunits)) - node_identity = random.randint(0, len(self.nodes)) - # 1 time slot when initial node updates own dataunit - time_slots_taken = 0 - if dataunit_id in self.nodes[node_identity].dataunits_ids: - time_slots_taken += 1 - - self.controller.message_broadcast([node_identity], []) + # only first node is taken at random + node_identity = random.randint(0, len(self.nodes) - 1) + self.time_slots_taken = 0 + new_neighbors = set() nodes_processed = set([node_identity]) - while len(nodes_processed) < len(self.nodes): - time_slots_taken += 1 - neighbors = self.nodes[node_identity].neighbors - # assume now that go to each node takes 1 ts, broadcasting parallel - time_slots_taken += 1 - - # assume that each node is updating itself also for 1 ts - time_slots_taken += 1 - nodes_processed.update(set(neighbors)) - self.controller.message_broadcast(list(nodes_processed), []) - node_identity = random.randint(0, len(neighbors)) + print("node ident>>> ", node_identity) + neighbors = self.graph.neighbors(node_identity) + path_ahead = self._shortest_path_for_neighbors(node_identity, neighbors) + print("neighbors>>> ", neighbors) + nodes_processed.update(set(neighbors)) + link_cost = min([self.graph[node_identity][n]['weight'] for n in path_ahead]) + print("time slots taken first time>>> ", link_cost) + self.time_slots_taken += link_cost - return time_slots_taken + while len(nodes_processed) < len(self.nodes): - def track_delivery_time(self): - pass + # ноды должны тоже выбираться параллельно, + # а не только одна, должны передавать сообщение + # ВСЕ соседи ПАРАЛЛЕЛЬНО + link_costs = [] + print("====================================") + + for i in neighbors: + print("identity now>>>> ", i) + neighbors_candidates = set(self.graph.neighbors(i)) - nodes_processed + new_neighbors.update(neighbors_candidates) + print("neighbors now>>>> ", new_neighbors) + path_ahead = self._shortest_path_for_neighbors( + i, new_neighbors) + print("path ahed>>> ", path_ahead) + max_weight = min([self.graph[i][n]['weight'] for n in path_ahead]) + print("max weight now>>> ", max_weight) + link_costs.append( + max_weight) + print("=============================") + print("link costs>> ", link_costs) + + link_cost = min(link_costs) + print("link costs before addig >> ", link_cost) + nodes_processed.update(set(new_neighbors)) + self.time_slots_taken += link_cost + + print("current time slots taken>>> ", self.time_slots_taken) + + neighbors.clear() + link_costs.clear() + + neighbors = list(new_neighbors)[:] + print("neighbors in the end>>>> ", neighbors) + new_neighbors.clear() + + + if self.time_slots_taken > self.diameter: + labels = {k.identity: k.identity for k in self.nodes} + self.controller.draw_graph( + self.graph, labels, f'{self.time_slots_taken}-{self.diameter}') + + def get_delivery_time(self): + """Useful for interactive mode now""" + return self.time_slots_taken def track_replicas_on_nodes(self): + """Useful for interactive mode now""" pass def represent_current_state(self): + """Useful for interactive mode now""" pass diff --git a/dds_simulation/graphs/extrapolation.py b/dds_simulation/graphs/extrapolation.py deleted file mode 100644 index 8a73c04..0000000 --- a/dds_simulation/graphs/extrapolation.py +++ /dev/null @@ -1,33 +0,0 @@ -import os -from uuid import uuid4 - -from matplotlib import pyplot - -from dds_simulation.conf.default import PROJECT_ROOT - - -def draw_extrapolation(x_vector, y_vector, partitions_number): - pyplot.figure() - pyplot.ylim(0,1) - pyplot.ylabel('I(U)') - - pyplot.plot(x_vector, y_vector, color='b', linewidth=3.0) - - path = os.path.join(PROJECT_ROOT, 'results', - '{}-consistent-partitions-inconsistency'.format( - partitions_number)) - pyplot.savefig(path) - - -def draw_probability_extrapolation(x_vector, y_vector, partitions, - nodes_number, average): - pyplot.figure() - pyplot.ylim(0, 1) - pyplot.ylabel('I({}) = {}'.format(partitions, average)) - pyplot.plot(x_vector, y_vector, color='b') - - path = os.path.join(PROJECT_ROOT, 'results', - '{}-consistent-partitions-probability-{}-nodes-{}'.format( - partitions, nodes_number, uuid4().hex)) - pyplot.savefig(path) - diff --git a/dds_simulation/start_experiment.py b/dds_simulation/start_experiment.py index dddf780..a46b7b5 100644 --- a/dds_simulation/start_experiment.py +++ b/dds_simulation/start_experiment.py @@ -1,21 +1,54 @@ +import random + +import networkx from dds_simulation.conf import default from dds_simulation.visualisation import graph_building -from dds_simulation.visualisation import graph_control, extrapolation + from dds_simulation.experiments import simulation from dds_simulation.experiments import consistent_partitions +from dds_simulation.visualisation.extrapolation import draw_function + + +def _initiate_dds(distribution, dataunits_number): + degree = random.randint(2, 5) // 2 * 2 + nodes = degree * 7 + graph = graph_building.form_graph(6, 3) + + try: + return simulation.DDSMessaging(graph, distribution, + dataunits_number) + except networkx.exception.NetworkXError: + return _initiate_dds(distribution, dataunits_number) if __name__ == '__main__': nodes = int(default.parameter('topology', 'nodes')) + edges = int(default.parameter('topology', 'links')) degree = int(default.parameter('topology', 'degree')) - graph = graph_building.form_graph(nodes, degree) + experiments = int(default.parameter('experiment', 'experiments')) + dataunits_number = int(default.parameter('dataunit', 'dataunits')) distribution = default.parameter('dataunit', 'distribution') + x_vector = [] + y_vector = [] + + + for i in range(experiments): + print("====================") + print(i) - dds_service = consistent_partitions.ConsistentExperiment( - graph, None, distribution, dataunits_number) - dds_service.start_experiment() + dds_service = _initiate_dds(distribution, dataunits_number) + dds_service.start_experiment() + x_vector.append(dds_service.time_slots_taken) + y_vector.append(dds_service.diameter) + print("X>> ", len(x_vector),x_vector) + print("Y>>> ", len(y_vector), y_vector) + draw_function(x_vector, y_vector, 'T_c', 'D(G)', + f'{experiments}-consistency-convergence-weighted') + # graph = graph_building.form_graph(nodes, degree) + # exp = consistent_partitions.ConsistentExperiment(graph) + # exp.start_experiment() diff --git a/dds_simulation/visualisation/extrapolation.py b/dds_simulation/visualisation/extrapolation.py index 4937a40..b9ccb69 100644 --- a/dds_simulation/visualisation/extrapolation.py +++ b/dds_simulation/visualisation/extrapolation.py @@ -1,4 +1,5 @@ import os +from datetime import datetime from uuid import uuid4 from matplotlib import pyplot @@ -20,13 +21,34 @@ def draw_extrapolation(x_vector, y_vector, partitions_number): def draw_probability_extrapolation(x_vector, y_vector, partitions, - nodes_number, average): + nodes_number, average, maximum=None): pyplot.figure() pyplot.ylim(0, 1) - pyplot.ylabel('I({}) = {}'.format(partitions, average)) + label = f'I({partitions}) = {average}' + if maximum is not None: + label = f'I_max({partitions}) = {maximum}' + pyplot.ylabel(label) pyplot.plot(x_vector, y_vector, color='b', linewidth=2.0) path = os.path.join(PROJECT_ROOT, 'results', - '{}-consistent-partitions-probability-{}-nodes-{}'.format( + '{}-max-consistent-partitions-{}-nodes-{}'.format( partitions, nodes_number, uuid4().hex)) - pyplot.savefig(path) \ No newline at end of file + pyplot.savefig(path) + + +def draw_function(x_vector, y_vector, x_label, y_label, filename): + pyplot.figure() + + pyplot.xlabel(x_label) + pyplot.ylabel(y_label) + print("X >>> ", x_vector) + print("Y >>>> ", y_vector) + + pyplot.plot(x_vector, y_vector, 'o', color='r', linewidth=2.0) + x_line = [x_vector[i] for i in range(0, len(x_vector)) + if x_vector[i] == y_vector[i]] + y_line = x_line[:] + pyplot.plot(x_line, y_line, color='k', linewidth=2.0) + path = os.path.join(PROJECT_ROOT, 'results', + f'{filename}.png') + pyplot.savefig(path) diff --git a/dds_simulation/visualisation/graph_building.py b/dds_simulation/visualisation/graph_building.py index 5032e12..b3cc1b5 100644 --- a/dds_simulation/visualisation/graph_building.py +++ b/dds_simulation/visualisation/graph_building.py @@ -1,15 +1,43 @@ import multiprocessing -from multiprocessing import Queue +import random +from time import time from matplotlib import pyplot as plt from matplotlib.animation import FuncAnimation import networkx as nx -def form_graph(nodes_number, degree=5): +def generate_data(): + nodes = random.randint(5, 20) + degree = random.randint(5, 15) + if nodes * degree % 2 == 0 and degree < nodes: + return nodes, degree + return generate_data() + + +def draw_graph(graph, labels, filename): + plt.figure() + nx.draw(graph, nx.circular_layout(graph),edgelist=graph.edges(data=True)) + nx.draw_networkx_labels(graph, nx.circular_layout(graph), + labels=labels, + font_size=16) + edge_labels = nx.get_edge_attributes(graph, 'weight') + nx.draw_networkx_edge_labels(graph, nx.circular_layout(graph), + edge_labels=edge_labels) + plt.savefig(f"{filename}.png") + + +def form_graph(nodes_number, degree): return nx.random_regular_graph(degree, nodes_number) +def form_gdn(nodes, edges): + return nx.gnm_random_graph(nodes, edges) + +def form_gnp(nodes, edges): + return nx.fast_gnp_random_graph(nodes, edges) + + class Animation(object): """Animates graph""" @@ -18,6 +46,7 @@ class Animation(object): def __init__(self, queue, graph, position): self.queue = queue self.graph = graph + self.graph_position = position for node in graph.nodes(): self.labels[node] = node @@ -62,9 +91,10 @@ def redraw_graph(self, i): def plot_graph(animation): fig = plt.figure() - ani = FuncAnimation(fig, animation.redraw_graph, + ani = FuncAnimation(fig, animation.draw_graph, init_func=animation.initiate, interval=200) + filename = f"{time()}-graph.png" plt.show() print(multiprocessing.current_process().name,"starting plot show process") #print statement preceded by true process name diff --git a/dds_simulation/visualisation/graph_control.py b/dds_simulation/visualisation/graph_control.py index 4548f9e..030539e 100644 --- a/dds_simulation/visualisation/graph_control.py +++ b/dds_simulation/visualisation/graph_control.py @@ -1,12 +1,10 @@ from multiprocessing import Process from multiprocessing import Queue -import random import networkx as nx -from PyQt5.QtCore import pyqtSignal -from PyQt5.QtCore import QObject -from dds_simulation.visualisation.graph_building import Animation +from dds_simulation.visualisation.extrapolation import draw_function +from dds_simulation.visualisation.graph_building import Animation, draw_graph from dds_simulation.visualisation.graph_building import plot_graph @@ -19,10 +17,17 @@ class GraphController(object): def __init__(self, graph): + self.graph = graph + + def animate(self): + self.queue = Queue() - self.queue.put_nowait([5]) + import random + random_node = random.randint(1, self.graph.number_of_nodes()) + self.queue.put_nowait([random_node,]) - animation = Animation(self.queue, graph, nx.circular_layout(graph)) + animation = Animation(self.queue, self.graph, nx.circular_layout( + self.graph)) animator = Process(target=plot_graph, name="Graph Animator", args=(animation,)) animator.start() @@ -30,3 +35,9 @@ def __init__(self, graph): def message_broadcast(self, nodes, links): self.queue.put_nowait(nodes) + + def draw_graph(self, graph, labels, filename): + draw_graph(graph, labels, filename) + + def draw_graphics(self, *args, **kwargs): + draw_function(*args, **kwargs) diff --git a/etc/datastore.ini b/etc/datastore.ini index eba33e9..a5d2c18 100644 --- a/etc/datastore.ini +++ b/etc/datastore.ini @@ -13,6 +13,8 @@ graph_type = random # The result of (nodes * degree) should be even degree = 4 +weighted = True + [dataunit] # Number of dataunits distributed across DDS @@ -24,8 +26,8 @@ distribution = random [experiment] -experiments = 100 +experiments = 200 sub_experiments = 50 -partitions = 5 \ No newline at end of file +partitions = 1 \ No newline at end of file diff --git a/models/dds-class-diagram.uxf b/models/dds-class-diagram.uxf new file mode 100644 index 0000000..cdb1574 --- /dev/null +++ b/models/dds-class-diagram.uxf @@ -0,0 +1,141 @@ + + + 10 + + UMLClass + + 450 + 270 + 270 + 80 + + DDSMessaging +-- +- simulates a datastore +- controls messages broadcasting +- does necessary calculations + + + + UMLClass + + 270 + 400 + 150 + 90 + + Visualisation +-- +- animate_graph +- draw_graph +- draw_graphics + + + + UMLClass + + 120 + 270 + 240 + 80 + + ConsistentPartitions +-- +- runs experiment for partitions + for a given datastore +- does necessary calculations + + + + UMLClass + + 280 + 120 + 220 + 110 + + DDS +-- +Base class for all +simulations +-- +- initialize common instances + for experiments + + + + Relation + + 180 + 170 + 120 + 120 + + lt=<<- + 100.0;10.0;10.0;10.0;10.0;100.0 + + + Relation + + 490 + 170 + 110 + 120 + + lt=<<- + 10.0;10.0;90.0;10.0;90.0;100.0 + + + UMLClass + + 460 + 400 + 170 + 30 + + GraphControlling + + + + Relation + + 130 + 340 + 160 + 160 + + lt=<<. +calls +draw_graphics + 140.0;130.0;10.0;130.0;10.0;10.0 + + + Relation + + 510 + 340 + 140 + 80 + + lt=<<. +call to control +actions on graph +to visualize + 10.0;60.0;10.0;10.0 + + + Relation + + 410 + 420 + 180 + 110 + + lt=<<. +call +animate_graph, +draw_graph and +draw_graphics + 10.0;50.0;160.0;50.0;160.0;10.0 + + diff --git a/models/message-bradcasting-state-machine.uxf b/models/message-bradcasting-state-machine.uxf new file mode 100644 index 0000000..97d485e --- /dev/null +++ b/models/message-bradcasting-state-machine.uxf @@ -0,0 +1,215 @@ + + + 10 + + UMLState + + 40 + 110 + 320 + 60 + + current node = random node; +TS = 0; processed = [] + + + + Relation + + 190 + 40 + 160 + 90 + + lt=<- +message incoming + 10.0;70.0;10.0;10.0 + + + UMLSpecialState + + 190 + 30 + 20 + 20 + + type=initial + + + + Relation + + 190 + 160 + 30 + 60 + + lt=<- + + 10.0;40.0;10.0;10.0 + + + UMLState + + 90 + 200 + 230 + 40 + + add random node to processed + + + + Relation + + 190 + 230 + 30 + 70 + + lt=<- + 10.0;50.0;10.0;10.0 + + + UMLState + + 70 + 280 + 270 + 50 + + neigbors = neighbors of +current node + + + + Relation + + 190 + 320 + 30 + 70 + + lt=<- + + 10.0;50.0;10.0;10.0 + + + UMLState + + 80 + 370 + 250 + 50 + + TS += min(link costs between +source node and neighbors) + + + + Relation + + 190 + 410 + 30 + 80 + + lt=<- + 10.0;60.0;10.0;10.0 + + + UMLState + + 80 + 470 + 250 + 50 + + add neighbors to processed + + + + UMLState + + 80 + 570 + 250 + 50 + + new neighbors = neigbors of +for each of current neighbors + + + + Relation + + 190 + 510 + 30 + 80 + + lt=<- + 10.0;60.0;10.0;10.0 + + + UMLSpecialState + + 470 + 550 + 110 + 80 + + type=decision + + + + + Relation + + 320 + 570 + 170 + 40 + + lt=<- + + 150.0;20.0;10.0;20.0 + + + Relation + + 330 + 280 + 220 + 290 + + lt=<- +length of processed < +total number of nodes + 10.0;20.0;200.0;20.0;200.0;270.0 + + + Relation + + 570 + 570 + 290 + 50 + + lt=<- +length of processed +reached total number of nodes + 270.0;20.0;10.0;20.0 + + + UMLSpecialState + + 840 + 580 + 20 + 20 + + type=final + + + diff --git a/models/message-broadcasting-state-machine.uxf b/models/message-broadcasting-state-machine.uxf new file mode 100644 index 0000000..97d485e --- /dev/null +++ b/models/message-broadcasting-state-machine.uxf @@ -0,0 +1,215 @@ + + + 10 + + UMLState + + 40 + 110 + 320 + 60 + + current node = random node; +TS = 0; processed = [] + + + + Relation + + 190 + 40 + 160 + 90 + + lt=<- +message incoming + 10.0;70.0;10.0;10.0 + + + UMLSpecialState + + 190 + 30 + 20 + 20 + + type=initial + + + + Relation + + 190 + 160 + 30 + 60 + + lt=<- + + 10.0;40.0;10.0;10.0 + + + UMLState + + 90 + 200 + 230 + 40 + + add random node to processed + + + + Relation + + 190 + 230 + 30 + 70 + + lt=<- + 10.0;50.0;10.0;10.0 + + + UMLState + + 70 + 280 + 270 + 50 + + neigbors = neighbors of +current node + + + + Relation + + 190 + 320 + 30 + 70 + + lt=<- + + 10.0;50.0;10.0;10.0 + + + UMLState + + 80 + 370 + 250 + 50 + + TS += min(link costs between +source node and neighbors) + + + + Relation + + 190 + 410 + 30 + 80 + + lt=<- + 10.0;60.0;10.0;10.0 + + + UMLState + + 80 + 470 + 250 + 50 + + add neighbors to processed + + + + UMLState + + 80 + 570 + 250 + 50 + + new neighbors = neigbors of +for each of current neighbors + + + + Relation + + 190 + 510 + 30 + 80 + + lt=<- + 10.0;60.0;10.0;10.0 + + + UMLSpecialState + + 470 + 550 + 110 + 80 + + type=decision + + + + + Relation + + 320 + 570 + 170 + 40 + + lt=<- + + 150.0;20.0;10.0;20.0 + + + Relation + + 330 + 280 + 220 + 290 + + lt=<- +length of processed < +total number of nodes + 10.0;20.0;200.0;20.0;200.0;270.0 + + + Relation + + 570 + 570 + 290 + 50 + + lt=<- +length of processed +reached total number of nodes + 270.0;20.0;10.0;20.0 + + + UMLSpecialState + + 840 + 580 + 20 + 20 + + type=final + + + diff --git a/papers/images/1-1-1-1-1-consistent-partitions-probability.png b/papers/2017/images/1-1-1-1-1-consistent-partitions-probability.png similarity index 100% rename from papers/images/1-1-1-1-1-consistent-partitions-probability.png rename to papers/2017/images/1-1-1-1-1-consistent-partitions-probability.png diff --git a/papers/2017/images/1-1-1-1-1-max-consistent-partitions.png b/papers/2017/images/1-1-1-1-1-max-consistent-partitions.png new file mode 100644 index 0000000..91b38a9 Binary files /dev/null and b/papers/2017/images/1-1-1-1-1-max-consistent-partitions.png differ diff --git a/papers/images/1-1-1-2-consistent-partitions-probability.png b/papers/2017/images/1-1-1-2-consistent-partitions-probability.png similarity index 100% rename from papers/images/1-1-1-2-consistent-partitions-probability.png rename to papers/2017/images/1-1-1-2-consistent-partitions-probability.png diff --git a/papers/2017/images/1-1-1-2-max-consistent-partitions.png b/papers/2017/images/1-1-1-2-max-consistent-partitions.png new file mode 100644 index 0000000..b27c0b0 Binary files /dev/null and b/papers/2017/images/1-1-1-2-max-consistent-partitions.png differ diff --git a/papers/images/1-1-3-consistent-partitions-probability.png b/papers/2017/images/1-1-3-consistent-partitions-probability.png similarity index 100% rename from papers/images/1-1-3-consistent-partitions-probability.png rename to papers/2017/images/1-1-3-consistent-partitions-probability.png diff --git a/papers/2017/images/1-1-3-max-consistent-partitions.png b/papers/2017/images/1-1-3-max-consistent-partitions.png new file mode 100644 index 0000000..8965454 Binary files /dev/null and b/papers/2017/images/1-1-3-max-consistent-partitions.png differ diff --git a/papers/images/1-2-2-consistent-partitions-probability.png b/papers/2017/images/1-2-2-consistent-partitions-probability.png similarity index 100% rename from papers/images/1-2-2-consistent-partitions-probability.png rename to papers/2017/images/1-2-2-consistent-partitions-probability.png diff --git a/papers/2017/images/1-2-2-max-consistent-partitions.png b/papers/2017/images/1-2-2-max-consistent-partitions.png new file mode 100644 index 0000000..18b5a23 Binary files /dev/null and b/papers/2017/images/1-2-2-max-consistent-partitions.png differ diff --git a/papers/images/1-4-consistent-partitions-probability.png b/papers/2017/images/1-4-consistent-partitions-probability.png similarity index 100% rename from papers/images/1-4-consistent-partitions-probability.png rename to papers/2017/images/1-4-consistent-partitions-probability.png diff --git a/papers/2017/images/1-4-max-consistent-partitions.png b/papers/2017/images/1-4-max-consistent-partitions.png new file mode 100644 index 0000000..78fdd08 Binary files /dev/null and b/papers/2017/images/1-4-max-consistent-partitions.png differ diff --git a/papers/images/1-consistent-partition.png b/papers/2017/images/1-consistent-partition.png similarity index 100% rename from papers/images/1-consistent-partition.png rename to papers/2017/images/1-consistent-partition.png diff --git a/papers/2017/images/1-max-consistent-partitions.png b/papers/2017/images/1-max-consistent-partitions.png new file mode 100644 index 0000000..aa8bc4f Binary files /dev/null and b/papers/2017/images/1-max-consistent-partitions.png differ diff --git a/papers/2017/images/100-consistency-convergence-weighted.png b/papers/2017/images/100-consistency-convergence-weighted.png new file mode 100644 index 0000000..b7cef03 Binary files /dev/null and b/papers/2017/images/100-consistency-convergence-weighted.png differ diff --git a/papers/2017/images/100-consistency-convergence.png b/papers/2017/images/100-consistency-convergence.png new file mode 100644 index 0000000..a7c9e8b Binary files /dev/null and b/papers/2017/images/100-consistency-convergence.png differ diff --git a/papers/2017/images/1000-consistency-convergence-weighted.png b/papers/2017/images/1000-consistency-convergence-weighted.png new file mode 100644 index 0000000..aad9f4a Binary files /dev/null and b/papers/2017/images/1000-consistency-convergence-weighted.png differ diff --git a/papers/2017/images/1000-consistency-convergence.png b/papers/2017/images/1000-consistency-convergence.png new file mode 100644 index 0000000..8587241 Binary files /dev/null and b/papers/2017/images/1000-consistency-convergence.png differ diff --git a/papers/images/2-3-consistent-partitions-probability.png b/papers/2017/images/2-3-consistent-partitions-probability.png similarity index 100% rename from papers/images/2-3-consistent-partitions-probability.png rename to papers/2017/images/2-3-consistent-partitions-probability.png diff --git a/papers/2017/images/2-3-max-consistent-partitions.png b/papers/2017/images/2-3-max-consistent-partitions.png new file mode 100644 index 0000000..02593b0 Binary files /dev/null and b/papers/2017/images/2-3-max-consistent-partitions.png differ diff --git a/papers/2017/images/200-consistency-convergence-weighted.png b/papers/2017/images/200-consistency-convergence-weighted.png new file mode 100644 index 0000000..fd70c86 Binary files /dev/null and b/papers/2017/images/200-consistency-convergence-weighted.png differ diff --git a/papers/2017/images/200-consistency-convergence.png b/papers/2017/images/200-consistency-convergence.png new file mode 100644 index 0000000..3ac6a59 Binary files /dev/null and b/papers/2017/images/200-consistency-convergence.png differ diff --git a/papers/2017/images/dds-class-diagram.png b/papers/2017/images/dds-class-diagram.png new file mode 100644 index 0000000..ee6d287 Binary files /dev/null and b/papers/2017/images/dds-class-diagram.png differ diff --git a/papers/2017/images/message-broadcasting-state-machine.png b/papers/2017/images/message-broadcasting-state-machine.png new file mode 100644 index 0000000..489490a Binary files /dev/null and b/papers/2017/images/message-broadcasting-state-machine.png differ diff --git a/papers/2017/index.aux b/papers/2017/index.aux new file mode 100644 index 0000000..893e2bd --- /dev/null +++ b/papers/2017/index.aux @@ -0,0 +1,62 @@ +\relax +\citation{bib:brewer} +\citation{bib:acid_vs_base} +\citation{bib:tanenbaum} +\@writefile{toc}{\contentsline {title}{Distributed Datastores: Consistency Metric for Distributed Datastores}{1}} +\@writefile{toc}{\authcount {2}} +\@writefile{toc}{\contentsline {author}{Kyrylo Rukkas\and Galyna Zholtkevych}{1}} +\@writefile{toc}{\contentsline {section}{\numberline {1}Introduction}{1}} +\newlabel{sec:intro}{{1}{1}} +\citation{bib:prob_approach} +\citation{bib:prob_approach} +\@writefile{toc}{\contentsline {section}{\numberline {2}Evolving consistency metric mathematical model: Derived metrics}{2}} +\newlabel{sec:model}{{2}{2}} +\newlabel{ex:partitions}{{1}{3}} +\newlabel{eq:metric}{{1}{3}} +\newlabel{ex:metric}{{2}{4}} +\@writefile{toc}{\contentsline {section}{\numberline {3}Convergence time complexity}{4}} +\newlabel{sec:complexity}{{3}{4}} +\newlabel{prop}{{1}{4}} +\@writefile{toc}{\contentsline {section}{\numberline {4}Case Study}{5}} +\newlabel{sec:experiments}{{4}{5}} +\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces The datastore is fully consistent and fully inconsistent\relax }}{6}} +\providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}} +\newlabel{pic:fully}{{1}{6}} +\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces The datastore has two consistent partitions\relax }}{6}} +\newlabel{pic:two_parts}{{2}{6}} +\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces The datastore has three consistent partitions\relax }}{6}} +\newlabel{pic:three_parts}{{3}{6}} +\citation{bib:github_dds} +\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces The datastore has four consistent partitions\relax }}{7}} +\newlabel{pic:four_parts}{{4}{7}} +\@writefile{toc}{\contentsline {section}{\numberline {5}Simulation Model to Estimate Inconsistency Ratio of Data}{7}} +\newlabel{sec:simulation}{{5}{7}} +\newlabel{pic:diagram}{{\caption@xref {pic:diagram}{ on input line 262}}{8}} +\newlabel{100}{{5a}{8}} +\newlabel{sub@100}{{a}{8}} +\newlabel{200}{{5b}{8}} +\newlabel{sub@200}{{b}{8}} +\newlabel{1000}{{5c}{8}} +\newlabel{sub@1000}{{c}{8}} +\@writefile{lof}{\contentsline {figure}{\numberline {5}{\ignorespaces Graphics for consistency convergence time\relax }}{8}} +\newlabel{pic:diagram}{{\caption@xref {pic:diagram}{ on input line 286}}{8}} +\newlabel{pic:100-w}{{6a}{8}} +\newlabel{sub@pic:100-w}{{a}{8}} +\newlabel{pic:200-w}{{6b}{8}} +\newlabel{sub@pic:200-w}{{b}{8}} +\newlabel{pic:1000-w}{{6c}{8}} +\newlabel{sub@pic:1000-w}{{c}{8}} +\@writefile{lof}{\contentsline {figure}{\numberline {6}{\ignorespaces Graphics for consistency convergence time on weighted graph\relax }}{8}} +\@writefile{lof}{\contentsline {figure}{\numberline {7}{\ignorespaces Class diagram for simulation model of a distributed datastore\relax }}{8}} +\newlabel{pic:diagram}{{7}{8}} +\@writefile{lof}{\contentsline {figure}{\numberline {8}{\ignorespaces State machine of simulation of message broadcasting through a datastore\relax }}{9}} +\newlabel{pic:state-machine}{{8}{9}} +\@writefile{toc}{\contentsline {section}{\numberline {6}Conclusion}{9}} +\citation{bib:c_ts} +\bibcite{bib:brewer}{1} +\bibcite{bib:prob_approach}{2} +\bibcite{bib:acid_vs_base}{3} +\bibcite{bib:tanenbaum}{4} +\bibcite{bib:andrews}{5} +\bibcite{bib:github_dds}{6} +\bibcite{bib:c_ts}{7} diff --git a/papers/2017/index.tex b/papers/2017/index.tex new file mode 100644 index 0000000..e8f08dc --- /dev/null +++ b/papers/2017/index.tex @@ -0,0 +1,383 @@ +%\emph{\emph{•}} +% * 2017-11-19T14:02:18.924Z: +% +% ^. +\documentclass{llncs} +% +\usepackage{amsmath} +\usepackage{amsfonts} +\usepackage{amssymb} +\usepackage{graphicx} +\usepackage{subcaption} +\captionsetup{compatibility=false} +\usepackage{url} +\usepackage[usenames]{color} + +\usepackage{lipsum} % stab + +\newcommand{\keyterms}[1]{\par{\bfseries{ Key Terms: }}#1} + +\begin{document} +\title{Distributed Datastores: Consistency Metric for Distributed Datastores} +\author{Kyrylo Rukkas\and Galyna Zholtkevych} +\institute{V.N.~Karazin Kharkiv National University\\ + 4, Svobody Sqr., 61022, Kharkiv, Ukraine\\ + \email{galynazholtkevych1991@gmail.com}} +\maketitle +\begin{abstract} +Distributed databases being evolved require write requests to be handled independently to increase availability. +This means that some number of nodes in a database can process modifying operation. This involves huge conflicts and leads to full inconsistency and mess between replicas. This paper takes attention on the consistency and proposing to replace binary metric by stochastic metric. Also, paper is devoted to +consistency convergence investigation and propose some inferences for the algorithm of decision-making behaviour. +\end{abstract} + +\section{Introduction}\label{sec:intro} +In the epoch of popular usage of IoT, Big Data, Cloud Computing, the data become more and more important thing and require larger, more reliable storage. This leads to increasing size of distributed storages. They become bigger and bigger and require the huge network across all the distributed nodes. +But there are several unsolved problems using large distributed datastores and some of them are strongly related to the CAP-theorem. +Given that the ACID strategy can not be supported for systems of this class (see \cite{bib:brewer}), mechanisms for delivering data across distributed storage still lack fast eventual consistency convergence, reliability and tolerance to network partitions. + +So let's concentrate on efficient consistency model - BASE (Basically Available, Soft State, Eventual Consistency) (see \cite{bib:acid_vs_base}). +Mainly this paper is devoted to eventual consistency. Let us remind what eventual consistency is referencing to well-known book \cite{bib:tanenbaum}: the form of consistency is called eventual if no updates take place for a long time and all replicas will gradually become consistent. + +Supporting replicas of an evolving distributed system up-to-date is very important but hard problem. Thus we need to provide a set of indicators of main characteristics of the distributed data store to assess the risk of a wrong decision because of the data inconsistency or unavailability. +In this paper, we focus our study on the problem of estimating data consistency in a distributed data store. Usually, in the datastore consistency is defined as binary for now. We want to demonstrate the useful concept defining of the consistency as binary value. +For that instead of binary metric for eventual consistency/inconsistency we propose stochastic metric. + +Also we would like to know if it is possible to find the optimal interval between writable operations occuring on distributed systems so that system can eventually be consistent in that interval. + +In the section \ref{sec:model} we develop consistency model defined in the previous paper \cite{bib:prob_approach} and define the inconsistency metric for a distributed datastore. +In section \ref{sec:complexity} section we approximate the time that is needed for consistency convergence - state of the distributed system when all nodes have consistent replicas. + +In section \ref{sec:experiments} we conduct experiments that prove the correctness of metric defined in previous section. +In section \ref{sec:simulation} we provide diagrams of the implemented application that we use for carrying out experiments. + +\section{Evolving consistency metric mathematical model: Derived metrics}\label{sec:model} + +In the previous paper (see \cite{bib:prob_approach}) we considered the metrics for all three elements of CAP-theorem. +Now our paper is mainly devoted to consistency question and how fast it can converge. +From that paper we are taking the developed mathematical model and expand it with elements, needed for the current research. + +We specify it as a tuple $(N, L, \partial,D, r)$, where \\ +\begin{tabular*}{\textwidth}{cp{0.5cm}p{0.8\textwidth}} +$N$&& is a finite set of nodes of a distributed datastore; \\ +$L$&& is a finite set of links of a distributed datastore; \\ +$\partial:L\rightarrow 2^N$&& is a mapping that associates each link with two nodes that it binds;\\ +$D$&& is a finite set of stored data units;\\ +$r:D\rightarrow 2^N$&& is a mapping that associates each data unit $d$ with a subset of nodes +that store its replica; \\ + + +$N_d$&& is a finite set of nodes that are having given dataunit $d$; \\ +$l(N_d)$&& is a number of nodes in datastore that are having given dataunit; \\ +$n_c$&& is a number of nodes in a subset of $N_d$ where all nodes have the same replica. +\end{tabular*} + +So we expanded the model now with two last assumptions. + +Our mathematical model for inconsistency $I$ will be able to define the inconsistency state of distributed datastore (see Example \ref{ex:metric} and Section \ref{sec:experiments}), and afterwards will focus on time which distributed datastore require to become fully consistent (see Section \ref{sec:complexity}). + +For this metric we created the probabilistic event taking two random nodes from the set $N_d$, they can be consistent with some probability. Carrying out this event many times, we can obtain the average probability of that two nodes will be consistent. + + +Thus, we have the following sample space: + +\[\Omega = \{0, 0, 1, 0, 1, 0, 1 , 1, 0, 1, 1, ....\}, \], + +where $0$ denotes the event when two nodes are consistent and $1$, on the contrary, when two nodes are inconsistent. + +Also let's claim that $p$ is the probability that two nodes are consistent, and +$q = 1 -p$ - the probability that two nodes are inconsistent. + + +As marked above, we introduce the stochastic metrics for inconsistency/consistency instead of binary ones. +We carry out experiment, we will "freeze" the simulated distributed datastore and time of that "freezing" we call time $t$. Thus we will be able to investigate the current state of the system. + +Let's denote $I$ as a value calculated by probabilistic formula . +We are thinking that having this formula will help us to eventually fully specify the mathematical model for consistency, so let it be one of mathematical model components. +So the probability of that two nodes taken at random are from consistent subset is + +\[p_c = \frac{n_c}{l(N_d)} \cdot \frac{n_c - 1}{l(N_d) - 1} = \frac{n_c * (n_c - 1)}{l(N_d)* (l(N_d) -1)},\] + where $n_c$ is length of consistent subset in the system at time $t$. +Obviously, inconsistency probability then: +\[p_{i} = 1 - p = 1 - \frac{n_c * (n_c - 1)}{l(N_d)* (l(N_d) -1)}.\] +Taking into account that minimum number of consistent nodes will be equal to 1, and the maximum number of consistent nodes is equal to $l(N_d)$, we have following consequences: +\begin{itemize} +\item Two nodes are inconsistent if $p_{ic} = 1$ +\item Two nodes are consistent if $p_{ic} = 0$ +\end{itemize} + +We developed the inconsistency formula for two nodes. Let's now extend it to more general one. +We still suppose that a data unit is represented by replicas on $N_d$ servers. Let's denote it as temporary $N$. +Let we have $K$ classes of mutually consistent replicas. +Then we denote by $N_k$ a number of replicas in $k^\mathrm{th}$ consistency class ($1\leq k0$ for all $k=1,\ldots,K$ and $N=N_1+\ldots+N_K$. +Such representations $N=N_1+\ldots+N_K$ are called integer partitions. + + +\noindent Thus, in this case any integer partition describes some inconsistency state. + +\begin{example}\label{ex:partitions} +All integer partitions for $5$ are +\begin{center} +\begin{tabular}{lclcl} + 5 & & 4+1 & & 3+2\\ + 3+1+1 &\hspace*{10pt}& 2+2+1 &\hspace*{10pt}& 2+1+1+1\\ + 1+1+1+1+1 +\end{tabular} +\end{center} +\end{example} + +Taking into account this consideration we define inconsistency metric for a data unit in the term of the corresponding integer partition. +As we denoted above in the section \ref{sec:model}, we suppose that the studied data unit $d$ is represented by $N$ replicas, which are being described by the integer partition $N=N_1,\ldots,M_K$. + +Then the inconsistency metric $I(d)$ is defined by the formula +\begin{equation}\label{eq:metric} + I(d)=1-\sum_{k=1}^K\dfrac{N_k(N_k-1)}{N(N-1)}. +\end{equation} + +\begin{example}\label{ex:metric} +Let us suppose that a data unit $u$ are being stored on five servers. +Then the corresponding inconsistency states (see Example~\ref{ex:partitions}) have the following values of the inconsistency metric +\begin{center} +\begin{tabular}{lclcl} + $I(5)=0$ & & $I(4+1)=\frac{2}{5}$ & & $I(3+2)=\frac{3}{5}$\\ + $I(3+1+1)=\frac{7}{10}$ &\hspace*{10pt}& $I(2+2+1)=\frac{4}{5}$ + &\hspace*{10pt}& $I(2+1+1+1)=\frac{9}{10}$\\ + $I(1+1+1+1+1)=1$ +\end{tabular} +\end{center} +The meaning of $I(d)$ is the value of probability to establish the fact of inconsistency by the way of comparison two randomly chosen replicas. +\end{example} +Example~\ref{ex:metric} demonstrates that the proposed metric is equal to $0$ for the absolutely consistent data unit (the case 5) and is equal to $1$ for the absolutely inconsistent data unit (the case 1+1+1+1+1) in the subset $N_d$. + + +\section{Convergence time complexity}\label{sec:complexity} + +Now we are interested to calculate the time that can be taken for consistency convergence. +We want to prove the following: +\begin{proposition}\label{prop} +Let we have a distributed datastore where all links are available and reliable (network partitions do not happen in a datastore and nodes are stable and respond in approximately equal time); the interval between writing operations is $t_w$. +Then $t_w$ is less than the diameter of network graph ensures eventual consistency of the datastore. +\end{proposition} +\begin{proof} +Let us denote as $T_c$ time for consistency convergence (time that is needed for the whole system to become consistent). +Let we have the trivial network where all links have capacity 1. +Thus, as the input we have the connected graph +$G$ with set of nodes $N$ and set of edges $E$. +\par\noindent Let us assume now that weight of each edge $e\in E$ satisfies the equality $w(e) = 1$\,. +\par\noindent +Let us take the nodes $n_1$ and $n_2$ that are at the largest distance each from other. So we can count that the time of delivering replica between $n_1$ and $n_2$ is the shortest path from $n_1$ to $n_2$. +Extrapolating this to all the system and taking into account that in the distributed datastore nodes are broadcasting each to other in parallel, we obtain the upper boundary of $T_c$ is the maximum of shortest paths in the worst case. +It is well-known that such maximum is diameter of the graph $T_c = diameter(G)$. +\par\noindent Let us complicate the system introducing the different capacity for links in distributed datastore that means that now our graph $G$ is weighted and +$w(e) \in\mathbb{N}$ for all $e\in E$. +\par\noindent +Thus, the diameter is the path $P = [e_1....e_n]$ where $e_i$ has own weight and +\[ + T_c = \sum_{i=1}^{n}w_i +\] +where $w_i$ is the weight of edge $e_i$ of the path $P$. +\par\noindent +$T_c$ is the number of time slots that a datastore requires to become fully consistent. +This means that after $T_c$ time points, all replicas become consistent. +This also means that a datastore is again available to accept writing requests, so that datastore will be able to store all the replicas passed before, and no accidental updating happen in the meantime. +\qed +\end{proof} + +\section{Case Study}\label{sec:experiments} + +The study in the Section \ref{sec:model} had been checked by the following experimentation: +we implemented a code that allows to test the accuracy of the inconsistency metric. Probability intervals for different partitions are demonstrating that the formula is correct - values obtained are around values obtained theoretically. To be more intuitive we took the same number of nodes and same partitions. + +It is obviously that we do not have exact matching, because the experiment is based on number of iterations where two nodes are taken from a given set of nodes randomly, but all we need is that value should vary slightly around theoretical value. Look in the figures below: +% +\begin{figure}[p] +\begin{subfigure}{0.5\linewidth} +\centering\includegraphics[scale=0.4]{images/1-consistent-partition.png}\hfill +\end{subfigure} +\begin{subfigure}{0.5\linewidth} +\centering\includegraphics[scale=0.4]{images/1-1-1-1-1-consistent-partitions-probability.png} +\end{subfigure} +\caption{The datastore is fully consistent and fully inconsistent}\label{pic:fully} +\end{figure} +% +Firstly, it can be seen that for one consistent partition $I(d)$ is equal to $0$ and when the system is fully inconsistent $I(d)$ is equal to $1$ (see in Fig~\ref{pic:fully}). + +\begin{figure} +\begin{subfigure}{0.5\linewidth} +\centering\includegraphics[scale=0.4]{images/2-3-consistent-partitions-probability.png}\hfill +\end{subfigure} +\begin{subfigure}{0.5\linewidth} +\centering\includegraphics[scale=0.4]{images/1-4-consistent-partitions-probability.png} +\end{subfigure} +\caption{The datastore has two consistent partitions}\label{pic:two_parts} +\end{figure} +Let us compare now the situation when we have two consistent partitions: the set which contains 2 and 3 nodes that consistent in the own subset, and the set with 4 and 1-length consistent subsets (see results in Fig~\ref{pic:two_parts}). + +Then we can easily see that: +\[ + I(3,2) = 1 - \frac{3 \cdot 2}{5 \cdot 4} - \frac{2 \cdot 1}{5 \cdot 4} = \frac{3}{5} , +\] +and +\[ + I(4,1) = 1 - \frac{4 \cdot 3}{5 \cdot 4} - \frac{1 \cdot 0}{5 \cdot 4} = \frac{2}{5} , +\] +Following this procedure for three consistent partitions (presented in +Fig~\ref{pic:three_parts}) in $N_d$: +\[ + I(3,1,1) = 1 - \frac{3 \cdot 2}{5 \cdot 4} - \frac{1 \cdot 0}{5 \cdot 4} - \frac{1 \cdot 0}{5 \cdot 4} = \frac{7}{10} , +\] +and +\[ + I(2,2,1) = 1 - \frac{2 \cdot 1}{5 \cdot 4} - \frac{2 \cdot 1}{5 \cdot 4} - \frac{1 \cdot 0}{5 \cdot 4} = \frac{4}{5} . +\] + +\begin{figure}[p] +\begin{subfigure}{0.5\linewidth} +\centering\includegraphics[scale=0.4]{images/1-1-3-consistent-partitions-probability.png} +\end{subfigure} +\begin{subfigure}{0.5\linewidth} +\centering\includegraphics[scale=0.4]{images/1-2-2-consistent-partitions-probability.png} +\end{subfigure} +\caption{The datastore has three consistent partitions}\label{pic:three_parts} +\end{figure} +% +And the final one: +\[ + I(2,1,1,1) = 1 - \frac{2 \cdot 1}{5 \cdot 4} - 3\cdot\frac{1 \cdot 0}{5 \cdot 4} = \frac{9}{10}\,. +\] +See results in Fig~\ref{pic:four_parts}. +\begin{figure} +\centering\includegraphics[scale=0.4]{images/1-1-1-2-consistent-partitions-probability.png} +\caption{The datastore has four consistent partitions}\label{pic:four_parts} +\end{figure} +% +So, we had easily shown on a simple subset, that our inconsistency metric value corresponds to theoretical one. + +Now we present the graphic that demonstrates the verity of that claim we did in Section \ref{sec:complexity} about that consistency convergence time $T_c$ for graph $G$ will be no greater than diameter of $G$. +To be more intuitive, we carried out the set of experiments on our simulation model: having simulated distributed datastore, we easily could run the imitation of one message broadcasting through the datastore and calculate the number of time slots it is taking in the real time. We have done it for graph with each edge of capacity 1. Below there are graphics for 100, 200, 1000 experiments (see in Fig~\ref{pic:100}, \ref{pic:200}, \ref{pic:1000}). + +We draw graphics in the following manner: obtain the diameter of graph $G$ (ordinates) and calculated by the simulation $T_c$ (axis). We can easily see that either we have the line demonstrating that $T_c = D(G)$, or +points that are showing that $T_c < D(G)$. +% +\begin{figure}[p]\label{pic:diagram} +\begin{subfigure}{0.3\linewidth} +\centering\includegraphics[width=\linewidth]{images/100-consistency-convergence.png} +\caption{100 experiments}\label{100} +\end{subfigure} +\begin{subfigure}{0.3\linewidth} +\centering\includegraphics[width=\linewidth]{images/200-consistency-convergence.png} +\caption{200 experiments}\label{200} +\end{subfigure} +\begin{subfigure}{0.3\linewidth} +\centering\includegraphics[width=\linewidth]{images/1000-consistency-convergence.png} +\caption{1000 experiments}\label{1000} +\end{subfigure} +\caption{Graphics for consistency convergence time} +\end{figure} +% +In this section we consider the case of an unweighted graph. +But the general situation requires to consider weighted one. +In this case, weight of an edge means the average time for delivering a message via the corresponding link. +However, algorithms to simulate this case are more complex. +Therefore this general case will be considered in the future, expanding experiments for random regular graph. Now we are able to present some results for random regular graph, that substantiate our Prop~\ref{prop} in the general case ( +see in Fig~\ref{pic:100-w}, \ref{pic:200-w}, \ref{pic:1000-w}). + +We can observe that all points have a location in the graphics such that $T_c$ is less or equal to $D(G)$ for weighted random regular graph. +\begin{figure}[p]\label{pic:diagram}] +\begin{subfigure}{0.3\linewidth} +\centering\includegraphics[width=\linewidth]{images/100-consistency-convergence-weighted.png} +\caption{100 experiments}\label{pic:100-w} +\end{subfigure} +\begin{subfigure}{0.3\linewidth} +\centering\includegraphics[width=\linewidth]{images/200-consistency-convergence-weighted.png} +\caption{200 experiments}\label{pic:200-w} +\end{subfigure} +\begin{subfigure}{0.3\linewidth} +\centering\includegraphics[width=\linewidth]{images/1000-consistency-convergence-weighted.png} +\caption{1000 experiments}\label{pic:1000-w} +\end{subfigure} +\caption{Graphics for consistency convergence time on weighted graph} +\end{figure} +% +\section{Simulation Model to Estimate Inconsistency Ratio of Data}\label{sec:simulation} +To carry out our experiments, we needed to implement the simulation model that will do experiment and calculate all needed values. This model is implemented as a computer program in Python language. We are thining that it is not valuable to present all the code of the program (however it is available at github page \cite{bib:github_dds}), but we count that it is useful to present the short class diagram of the project (see Fig~\ref{pic:diagram} below). +\begin{figure} +\centering\includegraphics[scale=0.4]{images/dds-class-diagram.png} +\caption{Class diagram for simulation model of a distributed datastore} +\label{pic:diagram} +\end{figure} +% +Also we would like to present the state machine diagram for the algorithm that was implemented to carry out experiments of consistency convergence estimation on a distributed datastore (see Fig~\ref{pic:state-machine}). +\begin{figure}[t] +\centering\includegraphics[scale=0.4]{images/message-broadcasting-state-machine.png} +\caption{State machine of simulation of message broadcasting through a datastore}\label{pic:state-machine} +\end{figure} +% +For experiment simulation we had chosen random regular graph. +During simulation we could see that for degree great than 2, calculating the time-slots taken for consistency convergence for one iteration, we can take a minimum between paths to neighbors and it will be the correct choice. Because for regular graph if the path to another neighbor is greater, there will be another path with lesser link cost that will take less time to converge. +% +\section{Conclusion} +In this paper we have studied the consistency property for distributed datastores. +So thinking how huge distributed datastores could be and having small interval between write operations to a datastore, we can conclude that binary variable loses its utility. +It might be needed to evaluate current inconsistency state of a datastore, to get nodes that are consistent and make a decision based on obtained results. + +Therefore we have proposed stochastic metric instead of binary one considering consistent partitions of a distributed datastore, formed metric for the inconsistency and shown the correctness of the formulae by carrying out experiments, shown when distributed datastore is fully inconsistent and fully consistent, evaluated the upper boundary of time that is taken for consistency convergence in a distributed datastore, taking into account that datastore is reliable, stable and does not have network partitions. + +Thus, based on the research of current paper we can make following recommendations for those who build the network topology of the distributed datastore: +\begin{itemize} +\item in the case of your datastore is a system with a domination of read operations, it must be sufficient to choose such network topology where frequency of write operations will be no greater than diameter of the graph representing network topology of a distributed datastore; +\item if frequency of write operations is grater than diameter of the graph, it may be useful to evaluate current inconsistency state of the graph; +\item if inconsistency state is close to 0 enough for current requirements, it means that there are inconsistent nodes that are far enough to not conflict with new replicas. Thus, developer or administrator of a datastore can choose as source availiable for writing that node that is in consistent list and far enough for inconsistent ones. But for that developer needs to provide such an algorithm for a datastore so that he will be able to obtain the current list of consistent nodes; +\item if still more strict consistency needs to be satisfied and inconsitency state is close enough to 0, a developer or administrator of a datastore can choose as source node for writing the node closest to the source node where previous write operation occurred; +\item if replica's history is not important for requirements, it may be possible to solve the problem fixing conflicts. This problem has been investigated in this paper \cite{bib:c_ts} +\end{itemize} +Above we described that we considered a lot of useful things for consistency in a distributed datastore. But still the research in this direction need to be continued and we have formed the next goals for the the future research +\begin{itemize} +\item carry out experiments for inconsistency metric in the worst case; +\item complicate a datastore introducing different availability for each node; +\item complicate a datastore introducing various network partitions for a datastore; +\item provide an algorithm that will allow to make a decision what is the best approach for a given datastore such that the eventually consistency is satisfied or an approach when inconsistency will not impact on datastore requirements; +\item theory for finding the most actual replica and time complexity for this algorithm +\item consider all the proposed above metrics in various kinds of real topologies. +\end{itemize} + +\begin{thebibliography}{00} +\bibitem{bib:brewer} +Eric A. Brewer: +Towards robust distributed systems, +(Invited talk). Principles of Distributed Computing, Portland, Oregon (July 2000). + +\bibitem{bib:prob_approach} +Kyrylo Rukkas, Galyna Zholtkevych: +Distributed Datastores: Towards Probabilistic Approach for Estimation of Dependability, +ICTERI 2015: 523-534 + +\bibitem{bib:acid_vs_base} +Charles Roe: +ACID vs. BASE: The Shifting pH of Database Transaction Processing +http://www.dataversity.net/acid-vs-base-the-shifting-ph-of-database-transaction-processing, March 1, 2012 + +\bibitem{bib:tanenbaum} +Tanenbaum, A.S., Van Steen, M.: +Distributed systems. Principles and Paradigms (2nd Edition). +Prentice-Hall, Inc. (2006) + +\bibitem{bib:andrews} +Andrews,~G.\,E.: +The theory of partitions. +Addison-Wesley (1976) + + +\bibitem{bib:github_dds} +G.Zholtkevych: +DDS Simulation project, +https://github.com/gzholtkevych/DDS-Simulation (2016) + +\bibitem{bib:c_ts} +Sanjay Kumar Madria: +Handling of Mutual Conflicts in Distributed Databases using Timestamps, +The Computer Journal. Vol. 41, No.\,6 (1998) + +\end{thebibliography} +\end{document} + diff --git a/papers/llncs.cls b/papers/2017/llncs.cls similarity index 100% rename from papers/llncs.cls rename to papers/2017/llncs.cls diff --git a/papers/2017/presentation/images/1-1-1-1-1-consistent-partitions-probability.png b/papers/2017/presentation/images/1-1-1-1-1-consistent-partitions-probability.png new file mode 100644 index 0000000..765e905 Binary files /dev/null and b/papers/2017/presentation/images/1-1-1-1-1-consistent-partitions-probability.png differ diff --git a/papers/2017/presentation/images/1-1-1-1-1-max-consistent-partitions.png b/papers/2017/presentation/images/1-1-1-1-1-max-consistent-partitions.png new file mode 100644 index 0000000..91b38a9 Binary files /dev/null and b/papers/2017/presentation/images/1-1-1-1-1-max-consistent-partitions.png differ diff --git a/papers/2017/presentation/images/1-1-1-2-consistent-partitions-probability.png b/papers/2017/presentation/images/1-1-1-2-consistent-partitions-probability.png new file mode 100644 index 0000000..dc09a6e Binary files /dev/null and b/papers/2017/presentation/images/1-1-1-2-consistent-partitions-probability.png differ diff --git a/papers/2017/presentation/images/1-1-1-2-max-consistent-partitions.png b/papers/2017/presentation/images/1-1-1-2-max-consistent-partitions.png new file mode 100644 index 0000000..b27c0b0 Binary files /dev/null and b/papers/2017/presentation/images/1-1-1-2-max-consistent-partitions.png differ diff --git a/papers/2017/presentation/images/1-1-3-consistent-partitions-probability.png b/papers/2017/presentation/images/1-1-3-consistent-partitions-probability.png new file mode 100644 index 0000000..2d20580 Binary files /dev/null and b/papers/2017/presentation/images/1-1-3-consistent-partitions-probability.png differ diff --git a/papers/2017/presentation/images/1-1-3-max-consistent-partitions.png b/papers/2017/presentation/images/1-1-3-max-consistent-partitions.png new file mode 100644 index 0000000..8965454 Binary files /dev/null and b/papers/2017/presentation/images/1-1-3-max-consistent-partitions.png differ diff --git a/papers/2017/presentation/images/1-2-2-consistent-partitions-probability.png b/papers/2017/presentation/images/1-2-2-consistent-partitions-probability.png new file mode 100644 index 0000000..c754f59 Binary files /dev/null and b/papers/2017/presentation/images/1-2-2-consistent-partitions-probability.png differ diff --git a/papers/2017/presentation/images/1-2-2-max-consistent-partitions.png b/papers/2017/presentation/images/1-2-2-max-consistent-partitions.png new file mode 100644 index 0000000..18b5a23 Binary files /dev/null and b/papers/2017/presentation/images/1-2-2-max-consistent-partitions.png differ diff --git a/papers/2017/presentation/images/1-4-consistent-partitions-probability.png b/papers/2017/presentation/images/1-4-consistent-partitions-probability.png new file mode 100644 index 0000000..1c60c34 Binary files /dev/null and b/papers/2017/presentation/images/1-4-consistent-partitions-probability.png differ diff --git a/papers/2017/presentation/images/1-4-max-consistent-partitions.png b/papers/2017/presentation/images/1-4-max-consistent-partitions.png new file mode 100644 index 0000000..78fdd08 Binary files /dev/null and b/papers/2017/presentation/images/1-4-max-consistent-partitions.png differ diff --git a/papers/2017/presentation/images/1-consistent-partition.png b/papers/2017/presentation/images/1-consistent-partition.png new file mode 100644 index 0000000..620d2b7 Binary files /dev/null and b/papers/2017/presentation/images/1-consistent-partition.png differ diff --git a/papers/2017/presentation/images/1-max-consistent-partitions.png b/papers/2017/presentation/images/1-max-consistent-partitions.png new file mode 100644 index 0000000..aa8bc4f Binary files /dev/null and b/papers/2017/presentation/images/1-max-consistent-partitions.png differ diff --git a/papers/2017/presentation/images/100-consistency-convergence-weighted.png b/papers/2017/presentation/images/100-consistency-convergence-weighted.png new file mode 100644 index 0000000..b7cef03 Binary files /dev/null and b/papers/2017/presentation/images/100-consistency-convergence-weighted.png differ diff --git a/papers/2017/presentation/images/100-consistency-convergence.png b/papers/2017/presentation/images/100-consistency-convergence.png new file mode 100644 index 0000000..a7c9e8b Binary files /dev/null and b/papers/2017/presentation/images/100-consistency-convergence.png differ diff --git a/papers/2017/presentation/images/1000-consistency-convergence-weighted.png b/papers/2017/presentation/images/1000-consistency-convergence-weighted.png new file mode 100644 index 0000000..aad9f4a Binary files /dev/null and b/papers/2017/presentation/images/1000-consistency-convergence-weighted.png differ diff --git a/papers/2017/presentation/images/1000-consistency-convergence.png b/papers/2017/presentation/images/1000-consistency-convergence.png new file mode 100644 index 0000000..8587241 Binary files /dev/null and b/papers/2017/presentation/images/1000-consistency-convergence.png differ diff --git a/papers/2017/presentation/images/2-3-consistent-partitions-probability.png b/papers/2017/presentation/images/2-3-consistent-partitions-probability.png new file mode 100644 index 0000000..f598023 Binary files /dev/null and b/papers/2017/presentation/images/2-3-consistent-partitions-probability.png differ diff --git a/papers/2017/presentation/images/2-3-max-consistent-partitions.png b/papers/2017/presentation/images/2-3-max-consistent-partitions.png new file mode 100644 index 0000000..02593b0 Binary files /dev/null and b/papers/2017/presentation/images/2-3-max-consistent-partitions.png differ diff --git a/papers/2017/presentation/images/200-consistency-convergence-weighted.png b/papers/2017/presentation/images/200-consistency-convergence-weighted.png new file mode 100644 index 0000000..fd70c86 Binary files /dev/null and b/papers/2017/presentation/images/200-consistency-convergence-weighted.png differ diff --git a/papers/2017/presentation/images/200-consistency-convergence.png b/papers/2017/presentation/images/200-consistency-convergence.png new file mode 100644 index 0000000..3ac6a59 Binary files /dev/null and b/papers/2017/presentation/images/200-consistency-convergence.png differ diff --git a/papers/2017/presentation/images/dds-class-diagram.png b/papers/2017/presentation/images/dds-class-diagram.png new file mode 100644 index 0000000..ee6d287 Binary files /dev/null and b/papers/2017/presentation/images/dds-class-diagram.png differ diff --git a/papers/2017/presentation/images/message-broadcasting-state-machine.png b/papers/2017/presentation/images/message-broadcasting-state-machine.png new file mode 100644 index 0000000..489490a Binary files /dev/null and b/papers/2017/presentation/images/message-broadcasting-state-machine.png differ diff --git a/papers/2017/presentation/index.aux b/papers/2017/presentation/index.aux new file mode 100644 index 0000000..b8ce041 --- /dev/null +++ b/papers/2017/presentation/index.aux @@ -0,0 +1,54 @@ +\relax +\providecommand\hyper@newdestlabel[2]{} +\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument} +\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined +\global\let\oldcontentsline\contentsline +\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}} +\global\let\oldnewlabel\newlabel +\gdef\newlabel#1#2{\newlabelxx{#1}#2} +\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}} +\AtEndDocument{\ifx\hyper@anchor\@undefined +\let\contentsline\oldcontentsline +\let\newlabel\oldnewlabel +\fi} +\fi} +\global\let\hyper@last\relax +\gdef\HyperFirstAtBeginDocument#1{#1} +\providecommand\HyField@AuxAddToFields[1]{} +\providecommand\HyField@AuxAddToCoFields[2]{} +\providecommand \oddpage@label [2]{} +\select@language{english} +\@writefile{toc}{\select@language{english}} +\@writefile{lof}{\select@language{english}} +\@writefile{lot}{\select@language{english}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{1}{1/1}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {1}{1}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{2}{2/2}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {2}{2}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{3}{3/3}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {3}{3}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{4}{4/4}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {4}{4}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{5}{5/5}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {5}{5}}} +\@writefile{snm}{\beamer@slide {eq:metric}{6}} +\newlabel{eq:metric}{{2}{6}{}{Doc-Start}{}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{6}{6/6}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {6}{6}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{7}{7/7}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {7}{7}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{8}{8/8}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {8}{8}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{9}{9/9}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {9}{9}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{10}{10/10}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {10}{10}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{11}{11/11}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {11}{11}}} +\@writefile{nav}{\headcommand {\slideentry {0}{0}{12}{12/12}{}{0}}} +\@writefile{nav}{\headcommand {\beamer@framepages {12}{12}}} +\@writefile{nav}{\headcommand {\beamer@partpages {1}{12}}} +\@writefile{nav}{\headcommand {\beamer@subsectionpages {1}{12}}} +\@writefile{nav}{\headcommand {\beamer@sectionpages {1}{12}}} +\@writefile{nav}{\headcommand {\beamer@documentpages {12}}} +\@writefile{nav}{\headcommand {\def \inserttotalframenumber {12}}} diff --git a/papers/2017/presentation/index.nav b/papers/2017/presentation/index.nav new file mode 100644 index 0000000..60a7df0 --- /dev/null +++ b/papers/2017/presentation/index.nav @@ -0,0 +1,29 @@ +\headcommand {\slideentry {0}{0}{1}{1/1}{}{0}} +\headcommand {\beamer@framepages {1}{1}} +\headcommand {\slideentry {0}{0}{2}{2/2}{}{0}} +\headcommand {\beamer@framepages {2}{2}} +\headcommand {\slideentry {0}{0}{3}{3/3}{}{0}} +\headcommand {\beamer@framepages {3}{3}} +\headcommand {\slideentry {0}{0}{4}{4/4}{}{0}} +\headcommand {\beamer@framepages {4}{4}} +\headcommand {\slideentry {0}{0}{5}{5/5}{}{0}} +\headcommand {\beamer@framepages {5}{5}} +\headcommand {\slideentry {0}{0}{6}{6/6}{}{0}} +\headcommand {\beamer@framepages {6}{6}} +\headcommand {\slideentry {0}{0}{7}{7/7}{}{0}} +\headcommand {\beamer@framepages {7}{7}} +\headcommand {\slideentry {0}{0}{8}{8/8}{}{0}} +\headcommand {\beamer@framepages {8}{8}} +\headcommand {\slideentry {0}{0}{9}{9/9}{}{0}} +\headcommand {\beamer@framepages {9}{9}} +\headcommand {\slideentry {0}{0}{10}{10/10}{}{0}} +\headcommand {\beamer@framepages {10}{10}} +\headcommand {\slideentry {0}{0}{11}{11/11}{}{0}} +\headcommand {\beamer@framepages {11}{11}} +\headcommand {\slideentry {0}{0}{12}{12/12}{}{0}} +\headcommand {\beamer@framepages {12}{12}} +\headcommand {\beamer@partpages {1}{12}} +\headcommand {\beamer@subsectionpages {1}{12}} +\headcommand {\beamer@sectionpages {1}{12}} +\headcommand {\beamer@documentpages {12}} +\headcommand {\def \inserttotalframenumber {12}} diff --git a/papers/2017/presentation/index.out b/papers/2017/presentation/index.out new file mode 100644 index 0000000..e69de29 diff --git a/papers/2017/presentation/index.snm b/papers/2017/presentation/index.snm new file mode 100644 index 0000000..d97a3bc --- /dev/null +++ b/papers/2017/presentation/index.snm @@ -0,0 +1 @@ +\beamer@slide {eq:metric}{6} diff --git a/papers/2017/presentation/index.tex b/papers/2017/presentation/index.tex new file mode 100644 index 0000000..fc94f2a --- /dev/null +++ b/papers/2017/presentation/index.tex @@ -0,0 +1,196 @@ +\documentclass[aspectratio=43]{beamer} +\usepackage[english]{babel} +\definecolor{beamer@blendedblue}{rgb}{0.9, 0.8,0.3} +\setbeamertemplate{footline}{\insertframenumber/\inserttotalframenumber} +\usepackage{graphicx} +\usepackage{subcaption} +\captionsetup{compatibility=false} +\usetheme{Hannover} +\usepackage{amssymb} +\usepackage{amsmath} +\usepackage{enumerate} +\usepackage{stmaryrd} +\usepackage[ruled,linesnumbered]{algorithm2e} + +\begin{document} +\title{Consistency Metric for Distributed Datastores} +\author{Kyrylo Rukkas, Galyna Zholtkevych} +\institute{V.N. Karazin Kharkiv National University, Ukraine} +\date{{\bfseries International Conference Taapsd -- 2017}\\ + Kyiv, 4 -- 8 Dec 2017} +% +\frame{\titlepage} +\begin{frame}{Agenda} +\begin{itemize} +\item Motivation: + +\begin{itemize} +\item need to make consistent datastores +\item consistency problem of a distributed datastorage +\item need to present consistency state as stochastic value. +\end{itemize} + +\item Background: + +\begin{itemize} +\item eventual consistency definition; +\item consistency model expanded with new definitions; +\end{itemize} + +\item Formula to define inconsistency state. Example +\item Graphics for inconsistency stochastic value +\item Consistency convergence proposition. Proof +\item Graphics for consistency convergence value +\item Conclusions and future work + +\end{itemize} +\end{frame} + + +\begin{frame}{Motivation} +\begin{itemize} +\item Consistency is not a new problem in datastores, especially if they are huge +\item At this point in large DS it become more usable to present consistency state as stoschastic value. + +\end{itemize} +\end{frame} + +\begin{frame}{Background} +\begin{block}{ACID vs BASE strategy} +\begin{itemize} +\item ACID (Atomic, Consistent, Isolated, Durable) mean that once a transaction is complete, its data is consistent and stable on disk +\item BASE (Basic Availability, Soft-State, Eventual Consistency) values availability, but +does not offer guaranteed consistency of replicated data at write time +\end{itemize} + +\end{block} + +\begin{block}{Eventual consistency definition} +Consistency is called eventual if no updates +take place for a long time and all replicas will gradually become consistent +\end{block} + +\end{frame} + +\begin{frame}{Evolved model for consistency} +Our model is a tuple $(N, L, \partial,D, r)$, where \\ + +$N$ -- a finite set of nodes; \\ +$L$ -- a finite set of links; \\ +$\partial:L\rightarrow 2^N$ -- a mapping that associates each link with two nodes;\\ +$D$ -- a finite set of stored data units;\\ +$r:D\rightarrow 2^N$ -- a mapping that associates each data unit $d$ with a subset of nodes +that store its replica. +$N_d$ -- a finite set of nodes that are having given dataunit $d$; \\ +$l(N_d)$ -- a number of nodes in datastore that are having given dataunit; \\ +$n_c$ -- a number of nodes in a subset of $N_d$ where all nodes have the same replica. + +\end{frame} + +\begin{frame}{Formula and example} +\begin{block}{Consistency formula derivation} +\begin{equation} + p_c = \frac{n_c}{l(N_d)} \cdot \frac{n_c - 1}{l(N_d) - 1} +\end{equation} +\begin{equation}\label{eq:metric} + I(d)=1-\sum_{k=1}^K\dfrac{N_k(N_k-1)}{N(N-1)}. +\end{equation} + +\end{block} +\begin{block}{Example} + +\begin{tabular}{lclcl} + $I(5)=0$ \\ $I(4+1)=\frac{2}{5}$ & & $I(3+2)=\frac{3}{5}$\\ + $I(3+1+1)=\frac{7}{10}$ && $I(2+2+1)=\frac{4}{5}$ \\ + $I(2+1+1+1)=\frac{9}{10}$\\ + $I(1+1+1+1+1)=1$ +\end{tabular} + +\end{block} +\end{frame} + +\begin{frame}{Demonstration of experiments} +\begin{figure} +\begin{subfigure}{0.3\linewidth} +\centering\includegraphics[width=\linewidth]{images/2-3-consistent-partitions-probability.png}\hfill +\end{subfigure} +\begin{subfigure}{0.3\linewidth} +\centering\includegraphics[width=\linewidth]{images/1-4-consistent-partitions-probability.png} +\end{subfigure} +\caption{The datastore has two consistent partitions} +\end{figure} + +\begin{figure}[p] +\begin{subfigure}{0.3\linewidth} +\centering\includegraphics[width=\linewidth]{images/1-1-3-consistent-partitions-probability.png} +\end{subfigure} +\begin{subfigure}{0.3\linewidth} +\centering\includegraphics[width=\linewidth]{images/1-2-2-consistent-partitions-probability.png} +\end{subfigure} +\caption{The datastore has three consistent partitions} +\end{figure} + +\end{frame} + + +\begin{frame}{Proposition about consistency convergence} +Let we have a distributed datastore where all links are available and reliable (network partitions do not happen in a datastore and nodes are stable and respond in approximately equal time); the interval between writing operations is $t_w$. +Then $t_w$ is less than the diameter of network graph ensures eventual consistency of the datastore. +\begin{block}{Brief proof} +\begin{enumerate} +\item $n_1$, $n_2$ are outermost each from other +\item Time slots $t$ taken from $n_1$ to $n_2$ is the shortest path from $n_1$ to $n_2$ +\item From definition of the diameter $T_c = diameter(G)$ +\end{enumerate} +\end{block} +\end{frame} + +\begin{frame}{Demonstration of experiments} +\begin{figure}[p] +\begin{subfigure}{0.4\linewidth} +\centering\includegraphics[width=\linewidth]{images/100-consistency-convergence-weighted.png} +\end{subfigure} +\begin{subfigure}{0.4\linewidth} +\centering\includegraphics[width=\linewidth]{images/200-consistency-convergence-weighted.png} +\end{subfigure} +\begin{subfigure}{0.4\linewidth} +\centering\includegraphics[width=\linewidth]{images/1000-consistency-convergence-weighted.png} +\end{subfigure} +\caption{Graphics for consistency convergence time on weighted graph} +\end{figure} + +\end{frame} + +\begin{frame}{Activity diagram of simulation process} + +\begin{figure} +\centering\includegraphics[width=\linewidth]{images/message-broadcasting-state-machine.png} +\end{figure} + +\end{frame} + +\begin{frame}{Conclusions} + +\begin{itemize} +\item the sufficient condition for distributed datastore can be choosing network topology where frequency of write operations will be no greater than diameter of the graph; +\item if frequency of write operations is grater than diameter of the graph, it may be useful to evaluate current inconsistency state of the graph; +\item if inconsistency state is close to 0 enough for current requirements, it means that there are inconsistent nodes that are far enough to not conflict with new replicas. The next source can be chosen from consistent list and far enough for inconsistent ones; +\item if still more strict consistency needs to be satisfied and inconsitency state is close enough to 0, the node closest to the source node where previous write operation occurred can be chosen for writing; +\item if replica's history is not important for requirements, it may be possible to solve the problem fixing conflicts. +\end{itemize} + +\end{frame} + +\begin{frame}{Future work} +\begin{itemize} +\item complicate a datastore introducing different availability for each node; +\item complicate a datastore introducing various network partitions for a datastore; +\item provide an algorithm that will allow to make a decision what is the best approach for a given datastore such that the eventually consistency is satisfied or an approach when inconsistency will not impact on datastore requirements; +\item theory for finding the most actual replica and time complexity for this algorithm +\item consider all the proposed above metrics in various kinds of real topologies. +\end{itemize} + +\end{frame} + + +\end{document} \ No newline at end of file diff --git a/papers/2017/presentation/index.toc b/papers/2017/presentation/index.toc new file mode 100644 index 0000000..556f38b --- /dev/null +++ b/papers/2017/presentation/index.toc @@ -0,0 +1 @@ +\select@language {english} diff --git a/papers/2018/index.aux b/papers/2018/index.aux new file mode 100644 index 0000000..f23e546 --- /dev/null +++ b/papers/2018/index.aux @@ -0,0 +1 @@ +\relax diff --git a/papers/2018/index.tex b/papers/2018/index.tex new file mode 100644 index 0000000..e365e3a --- /dev/null +++ b/papers/2018/index.tex @@ -0,0 +1,58 @@ +%\emph{\emph{•}} +% * 2017-11-19T14:02:18.924Z: +% +% ^. +\documentclass{llncs} +% +\usepackage{amsmath} +\usepackage{amsfonts} +\usepackage{amssymb} +\usepackage{graphicx} +\usepackage{subcaption} +\captionsetup{compatibility=false} +\usepackage{url} +\usepackage[usenames]{color} + +\usepackage{lipsum} % stab + +\begin{document} +Let there are several paths from $i$ to $j$. Let them denote as +$P = {P_1, P_2, .., P_k, ..., P_n}$. + +The message will be broadcasted, but the time it takes from $i$ to $j$ +will be unique, because only one message will reach the destination first +even if interval between messages are milliseconds or less due to processing rules. +Let the probability of choosing result fastest path be $p_k$ +That means that $\sum_{k=1}^{n} p_k = 1 $. +Delay == time taken for a signal to traverse a network from point A to point B. + +But let's consider $p_k$ in detail. +$p_k$ is the probability of that this path will be the fastest who transport message +to destination. + +But what it means - the shortest path? The shortest path is minimum of all sums for each link +cost of all paths. But how do we count link cost? +Each network (provider, actually) has own metric that identifies as the result "link cost". +(in non oriented graph, but we consider message going in one direction to reach destination and negotiate messages going in opposite one). +So that each link has own metric that identifies how much it costs to go through this (more expensive, cheaper, longer, faster, etc. ). In this metric many parameters are included. +(see \url{https://en.wikipedia.org/wiki/Metrics_(networking)} ). + +So depending on size of message, period of incoming, path reliability, bandwidth , mtu, throughput, delay, this metric is calculated. Here even fault tolerance for the link and nodes are included, so it has impacts on availability and partition tolerance of full network. That means that having a metric, we can negotiate other considerations about partition tolerance and availability. +The only thing is that each network provider has own metric calculation, own formula for that. + +Let's remember this. Let's also remember that administrator of network (local network) knows the metric of each link. This means if datastore is limited to this network, the shortest path is known. Note, that link cost is calculated dynamically depending on the network settings and dynamic changing of devices. + +Let this network be in London. +Amazon Web Services has good infrastructure, that is separated by regions and availability zones. Region can be european west 1 or usa west 2 etc. Each region has about three availibility zones (or more). +If the datastore has similar infrastructure and gateways between each other that are synced periodically (due to changing of time belts moment syncing is not needed, but syncing on demand is left along with syncs twice per day, or once per two hours or more often, for example). + +So let's consider separate network since we don't sync between regions and do not need instant global consistency. We want full consistency in just one network where we know the metric for each link. + +Again, having this metric we may not consider partition tolerance and availability for the datastore since these values may be included in metric of network provider (depending on provider). We have a graph with known weights and shortest path will be indeed the shortest considering latency, availability of path, data loss etc. Along with this metric another metric can be implemented to the chosen shortest path. These both metrics will be dynamic. +In time the metric of time through the shortest path will have statistical values to calculate average and this will give the average coming through the diameter of the graph. +This will mean the maximum period between messages incoming to such datastore. + +Now let's consider multiple messages to the datastore. As we already know shortest path in given network does not depend on number of messages, it only identifies the limit of messages +in size of bits. + +\end{document} \ No newline at end of file diff --git a/papers/2018/llncs.cls b/papers/2018/llncs.cls new file mode 100644 index 0000000..93c802e --- /dev/null +++ b/papers/2018/llncs.cls @@ -0,0 +1,1207 @@ +% LLNCS DOCUMENT CLASS -- version 2.17 (12-Jul-2010) +% Springer Verlag LaTeX2e support for Lecture Notes in Computer Science +% +%% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +%% +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesClass{llncs}[2010/07/12 v2.17 +^^J LaTeX document class for Lecture Notes in Computer Science] +% Options +\let\if@envcntreset\iffalse +\DeclareOption{envcountreset}{\let\if@envcntreset\iftrue} +\DeclareOption{citeauthoryear}{\let\citeauthoryear=Y} +\DeclareOption{oribibl}{\let\oribibl=Y} +\let\if@custvec\iftrue +\DeclareOption{orivec}{\let\if@custvec\iffalse} +\let\if@envcntsame\iffalse +\DeclareOption{envcountsame}{\let\if@envcntsame\iftrue} +\let\if@envcntsect\iffalse +\DeclareOption{envcountsect}{\let\if@envcntsect\iftrue} +\let\if@runhead\iffalse +\DeclareOption{runningheads}{\let\if@runhead\iftrue} + +\let\if@openright\iftrue +\let\if@openbib\iffalse +\DeclareOption{openbib}{\let\if@openbib\iftrue} + +% languages +\let\switcht@@therlang\relax +\def\ds@deutsch{\def\switcht@@therlang{\switcht@deutsch}} +\def\ds@francais{\def\switcht@@therlang{\switcht@francais}} + +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} + +\ProcessOptions + +\LoadClass[twoside]{article} +\RequirePackage{multicol} % needed for the list of participants, index +\RequirePackage{aliascnt} + +\setlength{\textwidth}{12.2cm} +\setlength{\textheight}{19.3cm} +\renewcommand\@pnumwidth{2em} +\renewcommand\@tocrmarg{3.5em} +% +\def\@dottedtocline#1#2#3#4#5{% + \ifnum #1>\c@tocdepth \else + \vskip \z@ \@plus.2\p@ + {\leftskip #2\relax \rightskip \@tocrmarg \advance\rightskip by 0pt plus 2cm + \parfillskip -\rightskip \pretolerance=10000 + \parindent #2\relax\@afterindenttrue + \interlinepenalty\@M + \leavevmode + \@tempdima #3\relax + \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip + {#4}\nobreak + \leaders\hbox{$\m@th + \mkern \@dotsep mu\hbox{.}\mkern \@dotsep + mu$}\hfill + \nobreak + \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}% + \par}% + \fi} +% +\def\switcht@albion{% +\def\abstractname{Abstract.} +\def\ackname{Acknowledgement.} +\def\andname{and} +\def\lastandname{\unskip, and} +\def\appendixname{Appendix} +\def\chaptername{Chapter} +\def\claimname{Claim} +\def\conjecturename{Conjecture} +\def\contentsname{Table of Contents} +\def\corollaryname{Corollary} +\def\definitionname{Definition} +\def\examplename{Example} +\def\exercisename{Exercise} +\def\figurename{Fig.} +\def\keywordname{{\bf Keywords:}} +\def\indexname{Index} +\def\lemmaname{Lemma} +\def\contriblistname{List of Contributors} +\def\listfigurename{List of Figures} +\def\listtablename{List of Tables} +\def\mailname{{\it Correspondence to\/}:} +\def\noteaddname{Note added in proof} +\def\notename{Note} +\def\partname{Part} +\def\problemname{Problem} +\def\proofname{Proof} +\def\propertyname{Property} +\def\propositionname{Proposition} +\def\questionname{Question} +\def\remarkname{Remark} +\def\seename{see} +\def\solutionname{Solution} +\def\subclassname{{\it Subject Classifications\/}:} +\def\tablename{Table} +\def\theoremname{Theorem}} +\switcht@albion +% Names of theorem like environments are already defined +% but must be translated if another language is chosen +% +% French section +\def\switcht@francais{%\typeout{On parle francais.}% + \def\abstractname{R\'esum\'e.}% + \def\ackname{Remerciements.}% + \def\andname{et}% + \def\lastandname{ et}% + \def\appendixname{Appendice} + \def\chaptername{Chapitre}% + \def\claimname{Pr\'etention}% + \def\conjecturename{Hypoth\`ese}% + \def\contentsname{Table des mati\`eres}% + \def\corollaryname{Corollaire}% + \def\definitionname{D\'efinition}% + \def\examplename{Exemple}% + \def\exercisename{Exercice}% + \def\figurename{Fig.}% + \def\keywordname{{\bf Mots-cl\'e:}} + \def\indexname{Index} + \def\lemmaname{Lemme}% + \def\contriblistname{Liste des contributeurs} + \def\listfigurename{Liste des figures}% + \def\listtablename{Liste des tables}% + \def\mailname{{\it Correspondence to\/}:} + \def\noteaddname{Note ajout\'ee \`a l'\'epreuve}% + \def\notename{Remarque}% + \def\partname{Partie}% + \def\problemname{Probl\`eme}% + \def\proofname{Preuve}% + \def\propertyname{Caract\'eristique}% +%\def\propositionname{Proposition}% + \def\questionname{Question}% + \def\remarkname{Remarque}% + \def\seename{voir} + \def\solutionname{Solution}% + \def\subclassname{{\it Subject Classifications\/}:} + \def\tablename{Tableau}% + \def\theoremname{Th\'eor\`eme}% +} +% +% German section +\def\switcht@deutsch{%\typeout{Man spricht deutsch.}% + \def\abstractname{Zusammenfassung.}% + \def\ackname{Danksagung.}% + \def\andname{und}% + \def\lastandname{ und}% + \def\appendixname{Anhang}% + \def\chaptername{Kapitel}% + \def\claimname{Behauptung}% + \def\conjecturename{Hypothese}% + \def\contentsname{Inhaltsverzeichnis}% + \def\corollaryname{Korollar}% +%\def\definitionname{Definition}% + \def\examplename{Beispiel}% + \def\exercisename{\"Ubung}% + \def\figurename{Abb.}% + \def\keywordname{{\bf Schl\"usselw\"orter:}} + \def\indexname{Index} +%\def\lemmaname{Lemma}% + \def\contriblistname{Mitarbeiter} + \def\listfigurename{Abbildungsverzeichnis}% + \def\listtablename{Tabellenverzeichnis}% + \def\mailname{{\it Correspondence to\/}:} + \def\noteaddname{Nachtrag}% + \def\notename{Anmerkung}% + \def\partname{Teil}% +%\def\problemname{Problem}% + \def\proofname{Beweis}% + \def\propertyname{Eigenschaft}% +%\def\propositionname{Proposition}% + \def\questionname{Frage}% + \def\remarkname{Anmerkung}% + \def\seename{siehe} + \def\solutionname{L\"osung}% + \def\subclassname{{\it Subject Classifications\/}:} + \def\tablename{Tabelle}% +%\def\theoremname{Theorem}% +} + +% Ragged bottom for the actual page +\def\thisbottomragged{\def\@textbottom{\vskip\z@ plus.0001fil +\global\let\@textbottom\relax}} + +\renewcommand\small{% + \@setfontsize\small\@ixpt{11}% + \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@ + \abovedisplayshortskip \z@ \@plus2\p@ + \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@ + \def\@listi{\leftmargin\leftmargini + \parsep 0\p@ \@plus1\p@ \@minus\p@ + \topsep 8\p@ \@plus2\p@ \@minus4\p@ + \itemsep0\p@}% + \belowdisplayskip \abovedisplayskip +} + +\frenchspacing +\widowpenalty=10000 +\clubpenalty=10000 + +\setlength\oddsidemargin {63\p@} +\setlength\evensidemargin {63\p@} +\setlength\marginparwidth {90\p@} + +\setlength\headsep {16\p@} + +\setlength\footnotesep{7.7\p@} +\setlength\textfloatsep{8mm\@plus 2\p@ \@minus 4\p@} +\setlength\intextsep {8mm\@plus 2\p@ \@minus 2\p@} + +\setcounter{secnumdepth}{2} + +\newcounter {chapter} +\renewcommand\thechapter {\@arabic\c@chapter} + +\newif\if@mainmatter \@mainmattertrue +\newcommand\frontmatter{\cleardoublepage + \@mainmatterfalse\pagenumbering{Roman}} +\newcommand\mainmatter{\cleardoublepage + \@mainmattertrue\pagenumbering{arabic}} +\newcommand\backmatter{\if@openright\cleardoublepage\else\clearpage\fi + \@mainmatterfalse} + +\renewcommand\part{\cleardoublepage + \thispagestyle{empty}% + \if@twocolumn + \onecolumn + \@tempswatrue + \else + \@tempswafalse + \fi + \null\vfil + \secdef\@part\@spart} + +\def\@part[#1]#2{% + \ifnum \c@secnumdepth >-2\relax + \refstepcounter{part}% + \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}% + \else + \addcontentsline{toc}{part}{#1}% + \fi + \markboth{}{}% + {\centering + \interlinepenalty \@M + \normalfont + \ifnum \c@secnumdepth >-2\relax + \huge\bfseries \partname~\thepart + \par + \vskip 20\p@ + \fi + \Huge \bfseries #2\par}% + \@endpart} +\def\@spart#1{% + {\centering + \interlinepenalty \@M + \normalfont + \Huge \bfseries #1\par}% + \@endpart} +\def\@endpart{\vfil\newpage + \if@twoside + \null + \thispagestyle{empty}% + \newpage + \fi + \if@tempswa + \twocolumn + \fi} + +\newcommand\chapter{\clearpage + \thispagestyle{empty}% + \global\@topnum\z@ + \@afterindentfalse + \secdef\@chapter\@schapter} +\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}% + {\protect\numberline{\thechapter}#1}% + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \chaptermark{#1}% + \addtocontents{lof}{\protect\addvspace{10\p@}}% + \addtocontents{lot}{\protect\addvspace{10\p@}}% + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterheading + \fi} +\def\@makechapterhead#1{% +% \vspace*{50\p@}% + {\centering + \ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \large\bfseries \@chapapp{} \thechapter + \par\nobreak + \vskip 20\p@ + \fi + \fi + \interlinepenalty\@M + \Large \bfseries #1\par\nobreak + \vskip 40\p@ + }} +\def\@schapter#1{\if@twocolumn + \@topnewpage[\@makeschapterhead{#1}]% + \else + \@makeschapterhead{#1}% + \@afterheading + \fi} +\def\@makeschapterhead#1{% +% \vspace*{50\p@}% + {\centering + \normalfont + \interlinepenalty\@M + \Large \bfseries #1\par\nobreak + \vskip 40\p@ + }} + +\renewcommand\section{\@startsection{section}{1}{\z@}% + {-18\p@ \@plus -4\p@ \@minus -4\p@}% + {12\p@ \@plus 4\p@ \@minus 4\p@}% + {\normalfont\large\bfseries\boldmath + \rightskip=\z@ \@plus 8em\pretolerance=10000 }} +\renewcommand\subsection{\@startsection{subsection}{2}{\z@}% + {-18\p@ \@plus -4\p@ \@minus -4\p@}% + {8\p@ \@plus 4\p@ \@minus 4\p@}% + {\normalfont\normalsize\bfseries\boldmath + \rightskip=\z@ \@plus 8em\pretolerance=10000 }} +\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% + {-18\p@ \@plus -4\p@ \@minus -4\p@}% + {-0.5em \@plus -0.22em \@minus -0.1em}% + {\normalfont\normalsize\bfseries\boldmath}} +\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}% + {-12\p@ \@plus -4\p@ \@minus -4\p@}% + {-0.5em \@plus -0.22em \@minus -0.1em}% + {\normalfont\normalsize\itshape}} +\renewcommand\subparagraph[1]{\typeout{LLNCS warning: You should not use + \string\subparagraph\space with this class}\vskip0.5cm +You should not use \verb|\subparagraph| with this class.\vskip0.5cm} + +\DeclareMathSymbol{\Gamma}{\mathalpha}{letters}{"00} +\DeclareMathSymbol{\Delta}{\mathalpha}{letters}{"01} +\DeclareMathSymbol{\Theta}{\mathalpha}{letters}{"02} +\DeclareMathSymbol{\Lambda}{\mathalpha}{letters}{"03} +\DeclareMathSymbol{\Xi}{\mathalpha}{letters}{"04} +\DeclareMathSymbol{\Pi}{\mathalpha}{letters}{"05} +\DeclareMathSymbol{\Sigma}{\mathalpha}{letters}{"06} +\DeclareMathSymbol{\Upsilon}{\mathalpha}{letters}{"07} +\DeclareMathSymbol{\Phi}{\mathalpha}{letters}{"08} +\DeclareMathSymbol{\Psi}{\mathalpha}{letters}{"09} +\DeclareMathSymbol{\Omega}{\mathalpha}{letters}{"0A} + +\let\footnotesize\small + +\if@custvec +\def\vec#1{\mathchoice{\mbox{\boldmath$\displaystyle#1$}} +{\mbox{\boldmath$\textstyle#1$}} +{\mbox{\boldmath$\scriptstyle#1$}} +{\mbox{\boldmath$\scriptscriptstyle#1$}}} +\fi + +\def\squareforqed{\hbox{\rlap{$\sqcap$}$\sqcup$}} +\def\qed{\ifmmode\squareforqed\else{\unskip\nobreak\hfil +\penalty50\hskip1em\null\nobreak\hfil\squareforqed +\parfillskip=0pt\finalhyphendemerits=0\endgraf}\fi} + +\def\getsto{\mathrel{\mathchoice {\vcenter{\offinterlineskip +\halign{\hfil +$\displaystyle##$\hfil\cr\gets\cr\to\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\gets +\cr\to\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr\gets +\cr\to\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr +\gets\cr\to\cr}}}}} +\def\lid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil +$\displaystyle##$\hfil\cr<\cr\noalign{\vskip1.2pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr<\cr +\noalign{\vskip1.2pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr<\cr +\noalign{\vskip1pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr +<\cr +\noalign{\vskip0.9pt}=\cr}}}}} +\def\gid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil +$\displaystyle##$\hfil\cr>\cr\noalign{\vskip1.2pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr>\cr +\noalign{\vskip1.2pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr>\cr +\noalign{\vskip1pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr +>\cr +\noalign{\vskip0.9pt}=\cr}}}}} +\def\grole{\mathrel{\mathchoice {\vcenter{\offinterlineskip +\halign{\hfil +$\displaystyle##$\hfil\cr>\cr\noalign{\vskip-1pt}<\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr +>\cr\noalign{\vskip-1pt}<\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr +>\cr\noalign{\vskip-0.8pt}<\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr +>\cr\noalign{\vskip-0.3pt}<\cr}}}}} +\def\bbbr{{\rm I\!R}} %reelle Zahlen +\def\bbbm{{\rm I\!M}} +\def\bbbn{{\rm I\!N}} %natuerliche Zahlen +\def\bbbf{{\rm I\!F}} +\def\bbbh{{\rm I\!H}} +\def\bbbk{{\rm I\!K}} +\def\bbbp{{\rm I\!P}} +\def\bbbone{{\mathchoice {\rm 1\mskip-4mu l} {\rm 1\mskip-4mu l} +{\rm 1\mskip-4.5mu l} {\rm 1\mskip-5mu l}}} +\def\bbbc{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm C$}\hbox{\hbox +to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\textstyle\rm C$}\hbox{\hbox +to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptstyle\rm C$}\hbox{\hbox +to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptscriptstyle\rm C$}\hbox{\hbox +to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}}} +\def\bbbq{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm +Q$}\hbox{\raise +0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}} +{\setbox0=\hbox{$\textstyle\rm Q$}\hbox{\raise +0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptstyle\rm Q$}\hbox{\raise +0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptscriptstyle\rm Q$}\hbox{\raise +0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}}} +\def\bbbt{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm +T$}\hbox{\hbox to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\textstyle\rm T$}\hbox{\hbox +to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptstyle\rm T$}\hbox{\hbox +to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptscriptstyle\rm T$}\hbox{\hbox +to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}}} +\def\bbbs{{\mathchoice +{\setbox0=\hbox{$\displaystyle \rm S$}\hbox{\raise0.5\ht0\hbox +to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox +to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}} +{\setbox0=\hbox{$\textstyle \rm S$}\hbox{\raise0.5\ht0\hbox +to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox +to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptstyle \rm S$}\hbox{\raise0.5\ht0\hbox +to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox +to0pt{\kern0.5\wd0\vrule height0.45\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptscriptstyle\rm S$}\hbox{\raise0.5\ht0\hbox +to0pt{\kern0.4\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox +to0pt{\kern0.55\wd0\vrule height0.45\ht0\hss}\box0}}}} +\def\bbbz{{\mathchoice {\hbox{$\mathsf\textstyle Z\kern-0.4em Z$}} +{\hbox{$\mathsf\textstyle Z\kern-0.4em Z$}} +{\hbox{$\mathsf\scriptstyle Z\kern-0.3em Z$}} +{\hbox{$\mathsf\scriptscriptstyle Z\kern-0.2em Z$}}}} + +\let\ts\, + +\setlength\leftmargini {17\p@} +\setlength\leftmargin {\leftmargini} +\setlength\leftmarginii {\leftmargini} +\setlength\leftmarginiii {\leftmargini} +\setlength\leftmarginiv {\leftmargini} +\setlength \labelsep {.5em} +\setlength \labelwidth{\leftmargini} +\addtolength\labelwidth{-\labelsep} + +\def\@listI{\leftmargin\leftmargini + \parsep 0\p@ \@plus1\p@ \@minus\p@ + \topsep 8\p@ \@plus2\p@ \@minus4\p@ + \itemsep0\p@} +\let\@listi\@listI +\@listi +\def\@listii {\leftmargin\leftmarginii + \labelwidth\leftmarginii + \advance\labelwidth-\labelsep + \topsep 0\p@ \@plus2\p@ \@minus\p@} +\def\@listiii{\leftmargin\leftmarginiii + \labelwidth\leftmarginiii + \advance\labelwidth-\labelsep + \topsep 0\p@ \@plus\p@\@minus\p@ + \parsep \z@ + \partopsep \p@ \@plus\z@ \@minus\p@} + +\renewcommand\labelitemi{\normalfont\bfseries --} +\renewcommand\labelitemii{$\m@th\bullet$} + +\setlength\arraycolsep{1.4\p@} +\setlength\tabcolsep{1.4\p@} + +\def\tableofcontents{\chapter*{\contentsname\@mkboth{{\contentsname}}% + {{\contentsname}}} + \def\authcount##1{\setcounter{auco}{##1}\setcounter{@auth}{1}} + \def\lastand{\ifnum\value{auco}=2\relax + \unskip{} \andname\ + \else + \unskip \lastandname\ + \fi}% + \def\and{\stepcounter{@auth}\relax + \ifnum\value{@auth}=\value{auco}% + \lastand + \else + \unskip, + \fi}% + \@starttoc{toc}\if@restonecol\twocolumn\fi} + +\def\l@part#1#2{\addpenalty{\@secpenalty}% + \addvspace{2em plus\p@}% % space above part line + \begingroup + \parindent \z@ + \rightskip \z@ plus 5em + \hrule\vskip5pt + \large % same size as for a contribution heading + \bfseries\boldmath % set line in boldface + \leavevmode % TeX command to enter horizontal mode. + #1\par + \vskip5pt + \hrule + \vskip1pt + \nobreak % Never break after part entry + \endgroup} + +\def\@dotsep{2} + +\let\phantomsection=\relax + +\def\hyperhrefextend{\ifx\hyper@anchor\@undefined\else +{}\fi} + +\def\addnumcontentsmark#1#2#3{% +\addtocontents{#1}{\protect\contentsline{#2}{\protect\numberline + {\thechapter}#3}{\thepage}\hyperhrefextend}}% +\def\addcontentsmark#1#2#3{% +\addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}\hyperhrefextend}}% +\def\addcontentsmarkwop#1#2#3{% +\addtocontents{#1}{\protect\contentsline{#2}{#3}{0}\hyperhrefextend}}% + +\def\@adcmk[#1]{\ifcase #1 \or +\def\@gtempa{\addnumcontentsmark}% + \or \def\@gtempa{\addcontentsmark}% + \or \def\@gtempa{\addcontentsmarkwop}% + \fi\@gtempa{toc}{chapter}% +} +\def\addtocmark{% +\phantomsection +\@ifnextchar[{\@adcmk}{\@adcmk[3]}% +} + +\def\l@chapter#1#2{\addpenalty{-\@highpenalty} + \vskip 1.0em plus 1pt \@tempdima 1.5em \begingroup + \parindent \z@ \rightskip \@tocrmarg + \advance\rightskip by 0pt plus 2cm + \parfillskip -\rightskip \pretolerance=10000 + \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip + {\large\bfseries\boldmath#1}\ifx0#2\hfil\null + \else + \nobreak + \leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern + \@dotsep mu$}\hfill + \nobreak\hbox to\@pnumwidth{\hss #2}% + \fi\par + \penalty\@highpenalty \endgroup} + +\def\l@title#1#2{\addpenalty{-\@highpenalty} + \addvspace{8pt plus 1pt} + \@tempdima \z@ + \begingroup + \parindent \z@ \rightskip \@tocrmarg + \advance\rightskip by 0pt plus 2cm + \parfillskip -\rightskip \pretolerance=10000 + \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip + #1\nobreak + \leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern + \@dotsep mu$}\hfill + \nobreak\hbox to\@pnumwidth{\hss #2}\par + \penalty\@highpenalty \endgroup} + +\def\l@author#1#2{\addpenalty{\@highpenalty} + \@tempdima=15\p@ %\z@ + \begingroup + \parindent \z@ \rightskip \@tocrmarg + \advance\rightskip by 0pt plus 2cm + \pretolerance=10000 + \leavevmode \advance\leftskip\@tempdima %\hskip -\leftskip + \textit{#1}\par + \penalty\@highpenalty \endgroup} + +\setcounter{tocdepth}{0} +\newdimen\tocchpnum +\newdimen\tocsecnum +\newdimen\tocsectotal +\newdimen\tocsubsecnum +\newdimen\tocsubsectotal +\newdimen\tocsubsubsecnum +\newdimen\tocsubsubsectotal +\newdimen\tocparanum +\newdimen\tocparatotal +\newdimen\tocsubparanum +\tocchpnum=\z@ % no chapter numbers +\tocsecnum=15\p@ % section 88. plus 2.222pt +\tocsubsecnum=23\p@ % subsection 88.8 plus 2.222pt +\tocsubsubsecnum=27\p@ % subsubsection 88.8.8 plus 1.444pt +\tocparanum=35\p@ % paragraph 88.8.8.8 plus 1.666pt +\tocsubparanum=43\p@ % subparagraph 88.8.8.8.8 plus 1.888pt +\def\calctocindent{% +\tocsectotal=\tocchpnum +\advance\tocsectotal by\tocsecnum +\tocsubsectotal=\tocsectotal +\advance\tocsubsectotal by\tocsubsecnum +\tocsubsubsectotal=\tocsubsectotal +\advance\tocsubsubsectotal by\tocsubsubsecnum +\tocparatotal=\tocsubsubsectotal +\advance\tocparatotal by\tocparanum} +\calctocindent + +\def\l@section{\@dottedtocline{1}{\tocchpnum}{\tocsecnum}} +\def\l@subsection{\@dottedtocline{2}{\tocsectotal}{\tocsubsecnum}} +\def\l@subsubsection{\@dottedtocline{3}{\tocsubsectotal}{\tocsubsubsecnum}} +\def\l@paragraph{\@dottedtocline{4}{\tocsubsubsectotal}{\tocparanum}} +\def\l@subparagraph{\@dottedtocline{5}{\tocparatotal}{\tocsubparanum}} + +\def\listoffigures{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn + \fi\section*{\listfigurename\@mkboth{{\listfigurename}}{{\listfigurename}}} + \@starttoc{lof}\if@restonecol\twocolumn\fi} +\def\l@figure{\@dottedtocline{1}{0em}{1.5em}} + +\def\listoftables{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn + \fi\section*{\listtablename\@mkboth{{\listtablename}}{{\listtablename}}} + \@starttoc{lot}\if@restonecol\twocolumn\fi} +\let\l@table\l@figure + +\renewcommand\listoffigures{% + \section*{\listfigurename + \@mkboth{\listfigurename}{\listfigurename}}% + \@starttoc{lof}% + } + +\renewcommand\listoftables{% + \section*{\listtablename + \@mkboth{\listtablename}{\listtablename}}% + \@starttoc{lot}% + } + +\ifx\oribibl\undefined +\ifx\citeauthoryear\undefined +\renewenvironment{thebibliography}[1] + {\section*{\refname} + \def\@biblabel##1{##1.} + \small + \list{\@biblabel{\@arabic\c@enumiv}}% + {\settowidth\labelwidth{\@biblabel{#1}}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep + \if@openbib + \advance\leftmargin\bibindent + \itemindent -\bibindent + \listparindent \itemindent + \parsep \z@ + \fi + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{\@arabic\c@enumiv}}% + \if@openbib + \renewcommand\newblock{\par}% + \else + \renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}% + \fi + \sloppy\clubpenalty4000\widowpenalty4000% + \sfcode`\.=\@m} + {\def\@noitemerr + {\@latex@warning{Empty `thebibliography' environment}}% + \endlist} +\def\@lbibitem[#1]#2{\item[{[#1]}\hfill]\if@filesw + {\let\protect\noexpand\immediate + \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces} +\newcount\@tempcntc +\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi + \@tempcnta\z@\@tempcntb\m@ne\def\@citea{}\@cite{\@for\@citeb:=#2\do + {\@ifundefined + {b@\@citeb}{\@citeo\@tempcntb\m@ne\@citea\def\@citea{,}{\bfseries + ?}\@warning + {Citation `\@citeb' on page \thepage \space undefined}}% + {\setbox\z@\hbox{\global\@tempcntc0\csname b@\@citeb\endcsname\relax}% + \ifnum\@tempcntc=\z@ \@citeo\@tempcntb\m@ne + \@citea\def\@citea{,}\hbox{\csname b@\@citeb\endcsname}% + \else + \advance\@tempcntb\@ne + \ifnum\@tempcntb=\@tempcntc + \else\advance\@tempcntb\m@ne\@citeo + \@tempcnta\@tempcntc\@tempcntb\@tempcntc\fi\fi}}\@citeo}{#1}} +\def\@citeo{\ifnum\@tempcnta>\@tempcntb\else + \@citea\def\@citea{,\,\hskip\z@skip}% + \ifnum\@tempcnta=\@tempcntb\the\@tempcnta\else + {\advance\@tempcnta\@ne\ifnum\@tempcnta=\@tempcntb \else + \def\@citea{--}\fi + \advance\@tempcnta\m@ne\the\@tempcnta\@citea\the\@tempcntb}\fi\fi} +\else +\renewenvironment{thebibliography}[1] + {\section*{\refname} + \small + \list{}% + {\settowidth\labelwidth{}% + \leftmargin\parindent + \itemindent=-\parindent + \labelsep=\z@ + \if@openbib + \advance\leftmargin\bibindent + \itemindent -\bibindent + \listparindent \itemindent + \parsep \z@ + \fi + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{}}% + \if@openbib + \renewcommand\newblock{\par}% + \else + \renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}% + \fi + \sloppy\clubpenalty4000\widowpenalty4000% + \sfcode`\.=\@m} + {\def\@noitemerr + {\@latex@warning{Empty `thebibliography' environment}}% + \endlist} + \def\@cite#1{#1}% + \def\@lbibitem[#1]#2{\item[]\if@filesw + {\def\protect##1{\string ##1\space}\immediate + \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces} + \fi +\else +\@cons\@openbib@code{\noexpand\small} +\fi + +\def\idxquad{\hskip 10\p@}% space that divides entry from number + +\def\@idxitem{\par\hangindent 10\p@} + +\def\subitem{\par\setbox0=\hbox{--\enspace}% second order + \noindent\hangindent\wd0\box0}% index entry + +\def\subsubitem{\par\setbox0=\hbox{--\,--\enspace}% third + \noindent\hangindent\wd0\box0}% order index entry + +\def\indexspace{\par \vskip 10\p@ plus5\p@ minus3\p@\relax} + +\renewenvironment{theindex} + {\@mkboth{\indexname}{\indexname}% + \thispagestyle{empty}\parindent\z@ + \parskip\z@ \@plus .3\p@\relax + \let\item\par + \def\,{\relax\ifmmode\mskip\thinmuskip + \else\hskip0.2em\ignorespaces\fi}% + \normalfont\small + \begin{multicols}{2}[\@makeschapterhead{\indexname}]% + } + {\end{multicols}} + +\renewcommand\footnoterule{% + \kern-3\p@ + \hrule\@width 2truecm + \kern2.6\p@} + \newdimen\fnindent + \fnindent1em +\long\def\@makefntext#1{% + \parindent \fnindent% + \leftskip \fnindent% + \noindent + \llap{\hb@xt@1em{\hss\@makefnmark\ }}\ignorespaces#1} + +\long\def\@makecaption#1#2{% + \small + \vskip\abovecaptionskip + \sbox\@tempboxa{{\bfseries #1.} #2}% + \ifdim \wd\@tempboxa >\hsize + {\bfseries #1.} #2\par + \else + \global \@minipagefalse + \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \vskip\belowcaptionskip} + +\def\fps@figure{htbp} +\def\fnum@figure{\figurename\thinspace\thefigure} +\def \@floatboxreset {% + \reset@font + \small + \@setnobreak + \@setminipage +} +\def\fps@table{htbp} +\def\fnum@table{\tablename~\thetable} +\renewenvironment{table} + {\setlength\abovecaptionskip{0\p@}% + \setlength\belowcaptionskip{10\p@}% + \@float{table}} + {\end@float} +\renewenvironment{table*} + {\setlength\abovecaptionskip{0\p@}% + \setlength\belowcaptionskip{10\p@}% + \@dblfloat{table}} + {\end@dblfloat} + +\long\def\@caption#1[#2]#3{\par\addcontentsline{\csname + ext@#1\endcsname}{#1}{\protect\numberline{\csname + the#1\endcsname}{\ignorespaces #2}}\begingroup + \@parboxrestore + \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par + \endgroup} + +% LaTeX does not provide a command to enter the authors institute +% addresses. The \institute command is defined here. + +\newcounter{@inst} +\newcounter{@auth} +\newcounter{auco} +\newdimen\instindent +\newbox\authrun +\newtoks\authorrunning +\newtoks\tocauthor +\newbox\titrun +\newtoks\titlerunning +\newtoks\toctitle + +\def\clearheadinfo{\gdef\@author{No Author Given}% + \gdef\@title{No Title Given}% + \gdef\@subtitle{}% + \gdef\@institute{No Institute Given}% + \gdef\@thanks{}% + \global\titlerunning={}\global\authorrunning={}% + \global\toctitle={}\global\tocauthor={}} + +\def\institute#1{\gdef\@institute{#1}} + +\def\institutename{\par + \begingroup + \parskip=\z@ + \parindent=\z@ + \setcounter{@inst}{1}% + \def\and{\par\stepcounter{@inst}% + \noindent$^{\the@inst}$\enspace\ignorespaces}% + \setbox0=\vbox{\def\thanks##1{}\@institute}% + \ifnum\c@@inst=1\relax + \gdef\fnnstart{0}% + \else + \xdef\fnnstart{\c@@inst}% + \setcounter{@inst}{1}% + \noindent$^{\the@inst}$\enspace + \fi + \ignorespaces + \@institute\par + \endgroup} + +\def\@fnsymbol#1{\ensuremath{\ifcase#1\or\star\or{\star\star}\or + {\star\star\star}\or \dagger\or \ddagger\or + \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger + \or \ddagger\ddagger \else\@ctrerr\fi}} + +\def\inst#1{\unskip$^{#1}$} +\def\fnmsep{\unskip$^,$} +\def\email#1{{\tt#1}} +\AtBeginDocument{\@ifundefined{url}{\def\url#1{#1}}{}% +\@ifpackageloaded{babel}{% +\@ifundefined{extrasenglish}{}{\addto\extrasenglish{\switcht@albion}}% +\@ifundefined{extrasfrenchb}{}{\addto\extrasfrenchb{\switcht@francais}}% +\@ifundefined{extrasgerman}{}{\addto\extrasgerman{\switcht@deutsch}}% +}{\switcht@@therlang}% +\providecommand{\keywords}[1]{\par\addvspace\baselineskip +\noindent\keywordname\enspace\ignorespaces#1}% +} +\def\homedir{\~{ }} + +\def\subtitle#1{\gdef\@subtitle{#1}} +\clearheadinfo +% +%%% to avoid hyperref warnings +\providecommand*{\toclevel@author}{999} +%%% to make title-entry parent of section-entries +\providecommand*{\toclevel@title}{0} +% +\renewcommand\maketitle{\newpage +\phantomsection + \refstepcounter{chapter}% + \stepcounter{section}% + \setcounter{section}{0}% + \setcounter{subsection}{0}% + \setcounter{figure}{0} + \setcounter{table}{0} + \setcounter{equation}{0} + \setcounter{footnote}{0}% + \begingroup + \parindent=\z@ + \renewcommand\thefootnote{\@fnsymbol\c@footnote}% + \if@twocolumn + \ifnum \col@number=\@ne + \@maketitle + \else + \twocolumn[\@maketitle]% + \fi + \else + \newpage + \global\@topnum\z@ % Prevents figures from going at top of page. + \@maketitle + \fi + \thispagestyle{empty}\@thanks +% + \def\\{\unskip\ \ignorespaces}\def\inst##1{\unskip{}}% + \def\thanks##1{\unskip{}}\def\fnmsep{\unskip}% + \instindent=\hsize + \advance\instindent by-\headlineindent + \if!\the\toctitle!\addcontentsline{toc}{title}{\@title}\else + \addcontentsline{toc}{title}{\the\toctitle}\fi + \if@runhead + \if!\the\titlerunning!\else + \edef\@title{\the\titlerunning}% + \fi + \global\setbox\titrun=\hbox{\small\rm\unboldmath\ignorespaces\@title}% + \ifdim\wd\titrun>\instindent + \typeout{Title too long for running head. Please supply}% + \typeout{a shorter form with \string\titlerunning\space prior to + \string\maketitle}% + \global\setbox\titrun=\hbox{\small\rm + Title Suppressed Due to Excessive Length}% + \fi + \xdef\@title{\copy\titrun}% + \fi +% + \if!\the\tocauthor!\relax + {\def\and{\noexpand\protect\noexpand\and}% + \protected@xdef\toc@uthor{\@author}}% + \else + \def\\{\noexpand\protect\noexpand\newline}% + \protected@xdef\scratch{\the\tocauthor}% + \protected@xdef\toc@uthor{\scratch}% + \fi + \addtocontents{toc}{\noexpand\protect\noexpand\authcount{\the\c@auco}}% + \addcontentsline{toc}{author}{\toc@uthor}% + \if@runhead + \if!\the\authorrunning! + \value{@inst}=\value{@auth}% + \setcounter{@auth}{1}% + \else + \edef\@author{\the\authorrunning}% + \fi + \global\setbox\authrun=\hbox{\small\unboldmath\@author\unskip}% + \ifdim\wd\authrun>\instindent + \typeout{Names of authors too long for running head. Please supply}% + \typeout{a shorter form with \string\authorrunning\space prior to + \string\maketitle}% + \global\setbox\authrun=\hbox{\small\rm + Authors Suppressed Due to Excessive Length}% + \fi + \xdef\@author{\copy\authrun}% + \markboth{\@author}{\@title}% + \fi + \endgroup + \setcounter{footnote}{\fnnstart}% + \clearheadinfo} +% +\def\@maketitle{\newpage + \markboth{}{}% + \def\lastand{\ifnum\value{@inst}=2\relax + \unskip{} \andname\ + \else + \unskip \lastandname\ + \fi}% + \def\and{\stepcounter{@auth}\relax + \ifnum\value{@auth}=\value{@inst}% + \lastand + \else + \unskip, + \fi}% + \begin{center}% + \let\newline\\ + {\Large \bfseries\boldmath + \pretolerance=10000 + \@title \par}\vskip .8cm +\if!\@subtitle!\else {\large \bfseries\boldmath + \vskip -.65cm + \pretolerance=10000 + \@subtitle \par}\vskip .8cm\fi + \setbox0=\vbox{\setcounter{@auth}{1}\def\and{\stepcounter{@auth}}% + \def\thanks##1{}\@author}% + \global\value{@inst}=\value{@auth}% + \global\value{auco}=\value{@auth}% + \setcounter{@auth}{1}% +{\lineskip .5em +\noindent\ignorespaces +\@author\vskip.35cm} + {\small\institutename} + \end{center}% + } + +% definition of the "\spnewtheorem" command. +% +% Usage: +% +% \spnewtheorem{env_nam}{caption}[within]{cap_font}{body_font} +% or \spnewtheorem{env_nam}[numbered_like]{caption}{cap_font}{body_font} +% or \spnewtheorem*{env_nam}{caption}{cap_font}{body_font} +% +% New is "cap_font" and "body_font". It stands for +% fontdefinition of the caption and the text itself. +% +% "\spnewtheorem*" gives a theorem without number. +% +% A defined spnewthoerem environment is used as described +% by Lamport. +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def\@thmcountersep{} +\def\@thmcounterend{.} + +\def\spnewtheorem{\@ifstar{\@sthm}{\@Sthm}} + +% definition of \spnewtheorem with number + +\def\@spnthm#1#2{% + \@ifnextchar[{\@spxnthm{#1}{#2}}{\@spynthm{#1}{#2}}} +\def\@Sthm#1{\@ifnextchar[{\@spothm{#1}}{\@spnthm{#1}}} + +\def\@spxnthm#1#2[#3]#4#5{\expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}\@addtoreset{#1}{#3}% + \expandafter\xdef\csname the#1\endcsname{\expandafter\noexpand + \csname the#3\endcsname \noexpand\@thmcountersep \@thmcounter{#1}}% + \expandafter\xdef\csname #1name\endcsname{#2}% + \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#4}{#5}}% + \global\@namedef{end#1}{\@endtheorem}}} + +\def\@spynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}% + \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}% + \expandafter\xdef\csname #1name\endcsname{#2}% + \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#3}{#4}}% + \global\@namedef{end#1}{\@endtheorem}}} + +\def\@spothm#1[#2]#3#4#5{% + \@ifundefined{c@#2}{\@latexerr{No theorem environment `#2' defined}\@eha}% + {\expandafter\@ifdefinable\csname #1\endcsname + {\newaliascnt{#1}{#2}% + \expandafter\xdef\csname #1name\endcsname{#3}% + \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#4}{#5}}% + \global\@namedef{end#1}{\@endtheorem}}}} + +\def\@spthm#1#2#3#4{\topsep 7\p@ \@plus2\p@ \@minus4\p@ +\refstepcounter{#1}% +\@ifnextchar[{\@spythm{#1}{#2}{#3}{#4}}{\@spxthm{#1}{#2}{#3}{#4}}} + +\def\@spxthm#1#2#3#4{\@spbegintheorem{#2}{\csname the#1\endcsname}{#3}{#4}% + \ignorespaces} + +\def\@spythm#1#2#3#4[#5]{\@spopargbegintheorem{#2}{\csname + the#1\endcsname}{#5}{#3}{#4}\ignorespaces} + +\def\@spbegintheorem#1#2#3#4{\trivlist + \item[\hskip\labelsep{#3#1\ #2\@thmcounterend}]#4} + +\def\@spopargbegintheorem#1#2#3#4#5{\trivlist + \item[\hskip\labelsep{#4#1\ #2}]{#4(#3)\@thmcounterend\ }#5} + +% definition of \spnewtheorem* without number + +\def\@sthm#1#2{\@Ynthm{#1}{#2}} + +\def\@Ynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname + {\global\@namedef{#1}{\@Thm{\csname #1name\endcsname}{#3}{#4}}% + \expandafter\xdef\csname #1name\endcsname{#2}% + \global\@namedef{end#1}{\@endtheorem}}} + +\def\@Thm#1#2#3{\topsep 7\p@ \@plus2\p@ \@minus4\p@ +\@ifnextchar[{\@Ythm{#1}{#2}{#3}}{\@Xthm{#1}{#2}{#3}}} + +\def\@Xthm#1#2#3{\@Begintheorem{#1}{#2}{#3}\ignorespaces} + +\def\@Ythm#1#2#3[#4]{\@Opargbegintheorem{#1} + {#4}{#2}{#3}\ignorespaces} + +\def\@Begintheorem#1#2#3{#3\trivlist + \item[\hskip\labelsep{#2#1\@thmcounterend}]} + +\def\@Opargbegintheorem#1#2#3#4{#4\trivlist + \item[\hskip\labelsep{#3#1}]{#3(#2)\@thmcounterend\ }} + +\if@envcntsect + \def\@thmcountersep{.} + \spnewtheorem{theorem}{Theorem}[section]{\bfseries}{\itshape} +\else + \spnewtheorem{theorem}{Theorem}{\bfseries}{\itshape} + \if@envcntreset + \@addtoreset{theorem}{section} + \else + \@addtoreset{theorem}{chapter} + \fi +\fi + +%definition of divers theorem environments +\spnewtheorem*{claim}{Claim}{\itshape}{\rmfamily} +\spnewtheorem*{proof}{Proof}{\itshape}{\rmfamily} +\if@envcntsame % alle Umgebungen wie Theorem. + \def\spn@wtheorem#1#2#3#4{\@spothm{#1}[theorem]{#2}{#3}{#4}} +\else % alle Umgebungen mit eigenem Zaehler + \if@envcntsect % mit section numeriert + \def\spn@wtheorem#1#2#3#4{\@spxnthm{#1}{#2}[section]{#3}{#4}} + \else % nicht mit section numeriert + \if@envcntreset + \def\spn@wtheorem#1#2#3#4{\@spynthm{#1}{#2}{#3}{#4} + \@addtoreset{#1}{section}} + \else + \def\spn@wtheorem#1#2#3#4{\@spynthm{#1}{#2}{#3}{#4} + \@addtoreset{#1}{chapter}}% + \fi + \fi +\fi +\spn@wtheorem{case}{Case}{\itshape}{\rmfamily} +\spn@wtheorem{conjecture}{Conjecture}{\itshape}{\rmfamily} +\spn@wtheorem{corollary}{Corollary}{\bfseries}{\itshape} +\spn@wtheorem{definition}{Definition}{\bfseries}{\itshape} +\spn@wtheorem{example}{Example}{\itshape}{\rmfamily} +\spn@wtheorem{exercise}{Exercise}{\itshape}{\rmfamily} +\spn@wtheorem{lemma}{Lemma}{\bfseries}{\itshape} +\spn@wtheorem{note}{Note}{\itshape}{\rmfamily} +\spn@wtheorem{problem}{Problem}{\itshape}{\rmfamily} +\spn@wtheorem{property}{Property}{\itshape}{\rmfamily} +\spn@wtheorem{proposition}{Proposition}{\bfseries}{\itshape} +\spn@wtheorem{question}{Question}{\itshape}{\rmfamily} +\spn@wtheorem{solution}{Solution}{\itshape}{\rmfamily} +\spn@wtheorem{remark}{Remark}{\itshape}{\rmfamily} + +\def\@takefromreset#1#2{% + \def\@tempa{#1}% + \let\@tempd\@elt + \def\@elt##1{% + \def\@tempb{##1}% + \ifx\@tempa\@tempb\else + \@addtoreset{##1}{#2}% + \fi}% + \expandafter\expandafter\let\expandafter\@tempc\csname cl@#2\endcsname + \expandafter\def\csname cl@#2\endcsname{}% + \@tempc + \let\@elt\@tempd} + +\def\theopargself{\def\@spopargbegintheorem##1##2##3##4##5{\trivlist + \item[\hskip\labelsep{##4##1\ ##2}]{##4##3\@thmcounterend\ }##5} + \def\@Opargbegintheorem##1##2##3##4{##4\trivlist + \item[\hskip\labelsep{##3##1}]{##3##2\@thmcounterend\ }} + } + +\renewenvironment{abstract}{% + \list{}{\advance\topsep by0.35cm\relax\small + \leftmargin=1cm + \labelwidth=\z@ + \listparindent=\z@ + \itemindent\listparindent + \rightmargin\leftmargin}\item[\hskip\labelsep + \bfseries\abstractname]} + {\endlist} + +\newdimen\headlineindent % dimension for space between +\headlineindent=1.166cm % number and text of headings. + +\def\ps@headings{\let\@mkboth\@gobbletwo + \let\@oddfoot\@empty\let\@evenfoot\@empty + \def\@evenhead{\normalfont\small\rlap{\thepage}\hspace{\headlineindent}% + \leftmark\hfil} + \def\@oddhead{\normalfont\small\hfil\rightmark\hspace{\headlineindent}% + \llap{\thepage}} + \def\chaptermark##1{}% + \def\sectionmark##1{}% + \def\subsectionmark##1{}} + +\def\ps@titlepage{\let\@mkboth\@gobbletwo + \let\@oddfoot\@empty\let\@evenfoot\@empty + \def\@evenhead{\normalfont\small\rlap{\thepage}\hspace{\headlineindent}% + \hfil} + \def\@oddhead{\normalfont\small\hfil\hspace{\headlineindent}% + \llap{\thepage}} + \def\chaptermark##1{}% + \def\sectionmark##1{}% + \def\subsectionmark##1{}} + +\if@runhead\ps@headings\else +\ps@empty\fi + +\setlength\arraycolsep{1.4\p@} +\setlength\tabcolsep{1.4\p@} + +\endinput +%end of file llncs.cls diff --git a/papers/index.aux b/papers/index.aux index dbae15f..6dae3aa 100644 --- a/papers/index.aux +++ b/papers/index.aux @@ -1,31 +1,72 @@ \relax -\citation{?} -\citation{?} -\citation{bib:c_ts} -\citation{?} +\citation{bib:brewer} +\citation{bib:acid_vs_base} +\citation{bib:tanenbaum} \@writefile{toc}{\contentsline {title}{Distributed Datastores: Consistency Metric for Distributed Datastores}{1}} \@writefile{toc}{\authcount {2}} \@writefile{toc}{\contentsline {author}{Kyrylo Rukkas\and Galyna Zholtkevych}{1}} \@writefile{toc}{\contentsline {section}{\numberline {1}Introduction}{1}} \newlabel{sec:intro}{{1}{1}} -\citation{?} -\citation{?} +\citation{bib:prob_approach} +\citation{bib:prob_approach} \@writefile{toc}{\contentsline {section}{\numberline {2}Evolving consistency metric mathematical model: Derived metrics}{2}} -\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Case Study}{2}} -\newlabel{sec:experiments}{{2.1}{2}} +\newlabel{sec:model}{{2}{2}} \newlabel{ex:partitions}{{1}{3}} \newlabel{eq:metric}{{1}{3}} -\newlabel{ex:metric}{{2}{3}} -\@writefile{toc}{\contentsline {section}{\numberline {3}One Metric to Assess Consistency of Data}{6}} -\@writefile{toc}{\contentsline {section}{\numberline {4}Simulation Model to Assess Inconsistency Ratio of Data}{6}} -\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}Consistency probability}{6}} -\@writefile{toc}{\contentsline {subsection}{\numberline {4.2}Convergence time complexity}{7}} -\@writefile{toc}{\contentsline {subsection}{\numberline {4.3}Replica's actuality research}{7}} -\@writefile{toc}{\contentsline {section}{\numberline {5}Remained studying}{7}} -\newlabel{sec:experiments}{{5}{7}} -\bibcite{bib:c_ts}{1} -\bibcite{bib:andrews}{2} -\@writefile{toc}{\contentsline {section}{\numberline {6}Inconsistency metric in various kinds of algorithms spreading replicas across DDS}{8}} -\@writefile{toc}{\contentsline {section}{\numberline {7}Different topologies}{8}} -\@writefile{toc}{\contentsline {section}{\numberline {8}Future work}{8}} -\@writefile{toc}{\contentsline {section}{\numberline {9}Conclusion}{8}} +\newlabel{ex:metric}{{2}{4}} +\@writefile{toc}{\contentsline {section}{\numberline {3}Convergence time complexity}{4}} +\newlabel{sec:complexity}{{3}{4}} +\newlabel{prop}{{1}{4}} +\@writefile{toc}{\contentsline {section}{\numberline {4}Case Study}{5}} +\newlabel{sec:experiments}{{4}{5}} +\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces The datastore is fully consistent and fully inconsistent\relax }}{6}} +\providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}} +<<<<<<< Updated upstream +\newlabel{pic:fully}{{1}{6}} +\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces The datastore has two consistent partitions\relax }}{6}} +\newlabel{pic:two_parts}{{2}{6}} +\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces The datastore has three consistent partitions\relax }}{6}} +\newlabel{pic:three_parts}{{3}{6}} +\citation{bib:github_dds} +\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces The datastore has four consistent partitions\relax }}{7}} +\newlabel{pic:four_parts}{{4}{7}} +\@writefile{toc}{\contentsline {section}{\numberline {5}Simulation Model to Estimate Inconsistency Ratio of Data}{7}} +\newlabel{sec:simulation}{{5}{7}} +\newlabel{pic:diagram}{{\caption@xref {pic:diagram}{ on input line 262}}{8}} +\newlabel{100}{{5a}{8}} +\newlabel{sub@100}{{a}{8}} +\newlabel{200}{{5b}{8}} +\newlabel{sub@200}{{b}{8}} +\newlabel{1000}{{5c}{8}} +\newlabel{sub@1000}{{c}{8}} +\@writefile{lof}{\contentsline {figure}{\numberline {5}{\ignorespaces Graphics for consistency convergence time\relax }}{8}} +\newlabel{pic:diagram}{{\caption@xref {pic:diagram}{ on input line 286}}{8}} +\newlabel{pic:100-w}{{6a}{8}} +\newlabel{sub@pic:100-w}{{a}{8}} +\newlabel{pic:200-w}{{6b}{8}} +\newlabel{sub@pic:200-w}{{b}{8}} +\newlabel{pic:1000-w}{{6c}{8}} +\newlabel{sub@pic:1000-w}{{c}{8}} +\@writefile{lof}{\contentsline {figure}{\numberline {6}{\ignorespaces Graphics for consistency convergence time on weighted graph\relax }}{8}} +\@writefile{lof}{\contentsline {figure}{\numberline {7}{\ignorespaces Class diagram for simulation model of a distributed datastore\relax }}{8}} +\newlabel{pic:diagram}{{7}{8}} +\@writefile{lof}{\contentsline {figure}{\numberline {8}{\ignorespaces State machine of simulation of message broadcasting through a datastore\relax }}{9}} +\newlabel{pic:state-machine}{{8}{9}} +\@writefile{toc}{\contentsline {section}{\numberline {6}Conclusion}{9}} +======= +\newlabel{pic:diagram}{{\caption@xref {pic:diagram}{ on input line 276}}{6}} +\citation{bib:github_dds} +\@writefile{toc}{\contentsline {section}{\numberline {5}Simulation Model to Assess Inconsistency Ratio of Data}{7}} +\newlabel{sec:simulation}{{5}{7}} +\newlabel{pic:diagram}{{\caption@xref {pic:diagram}{ on input line 294}}{7}} +\@writefile{toc}{\contentsline {section}{\numberline {6}Conclusion}{7}} +>>>>>>> Stashed changes +\citation{bib:c_ts} +\bibcite{bib:brewer}{1} +\bibcite{bib:prob_approach}{2} +\bibcite{bib:acid_vs_base}{3} +\bibcite{bib:tanenbaum}{4} +\bibcite{bib:andrews}{5} +\bibcite{bib:github_dds}{6} +\bibcite{bib:c_ts}{7} +\@writefile{toc}{\contentsline {section}{\numberline {7}Future work}{8}} diff --git a/papers/index.tex b/papers/index.tex deleted file mode 100644 index b45fa14..0000000 --- a/papers/index.tex +++ /dev/null @@ -1,298 +0,0 @@ -%\emph{\emph{•}} -\documentclass{llncs} -% -\usepackage{amsmath} -\usepackage{amsfonts} -\usepackage{amssymb} -\usepackage{graphicx} -\usepackage{subcaption} -\captionsetup{compatibility=false} -\usepackage{url} -\usepackage[usenames]{color} - -\newcommand{\keyterms}[1]{\par{\bfseries{ Key Terms: }}#1} - -\begin{document} -\title{Distributed Datastores: Consistency Metric for Distributed Datastores} -\author{Kyrylo Rukkas\and Galyna Zholtkevych} -\institute{V.N.~Karazin Kharkiv National University\\ - 4, Svobody Sqr., 61022, Kharkiv, Ukraine\\ - \email{galynazholtkevych1991@gmail.com}} -\maketitle -\begin{abstract} -Distributed databases being evolved require write requests to be handled independently to increase availability. -This means that nodes in a database can process modifying operation. This involves huge conflicts and leads to -full inconsistency and mess between replicas. This paper investigates a trade-off between availability and consistency -in a distributed database. -\end{abstract} - -\section{Introduction}\label{sec:intro} -In the epoch of popular usage of IoT, Big Data, Cloud Computing, the data become more and more -important thing and require larger, more reliable storage. This leads to increasing size of distributed -storages. They become bigger and bigger and require the huge network across all the distributed nodes. -But there are several unsolved problems using large distributed datastores and some of them are strongly related -to the CAP-theorem. Given that the ACID strategy can not be supported for systems of this class \cite[{\color{red} references to the CAP-conjecture})]{?}, mechanisms for delivering data across distributed storage still lack fast consistency convergence, reliability and tolerance to network partitions. -{\color{red} -Provide facts for this problem. (links etc.) -} - - -Supporting replicas of an evolving distributed system up-to-dates is very important but hard problem. Thus we need to provide a set of indicators of main characteristics of the distributed data store to assess the risk of a wrong decision because of the data inconsistency or unavailability. -In this paper, we focus our study on the problem of estimating data consistency in a distributed data store. - -Given that in a distributed data store consistency of replicas may only be eventually \cite[{\color{red} you need to refer to the corresponding papers}]{?}, we need the answering the following questions -\begin{enumerate} -\item -How to resolve conflicts between replicas? -This problem is raised and partially solved in \cite{bib:c_ts}, where algorithm with timestamps on replicas is proposed. -But merging updated replicas, it takes the response time, so consistency convergence decreases. -In the paper further sections we will investigate faster consistency convergence. -\item -Is it always possible to ensure the convergence to the consistency of data and by what means can this be achieved? -This depends on many factors including network topology, -network failures, links bandwidth, bottlenecks in network overall etc \cite[{\color{red} links are needed}]{?}. -\item -What methods can be used to effectively solve the broadcast storm problem? -This is well-known problem and it has the solution in \cite[{\color{red} links are needed}]{?}. -\item How do loops when broadcasting data be eliminated? -This is what networking algorithms aimed to solve \cite[{\color{red} links are needed}]{?}. -\end{enumerate} - -\section{Evolving consistency metric mathematical model: Derived metrics} - -In the previous paper {\color{red} Link to paper} we considered the metrics for all three elements of CAP-theorem. -Now our paper is mainly devoted to consistency question and how fast it can converge. -From previous paper we are taking the developed mathematical model. -(Refresh model here, specify only needed elements - nodes, dataunits, replicas) -$N$ - .... -$N(d)$ - the set of nodes that are having given dataunit $d$. -$l(N(d))$ - the number of nodes in datastore that are having given dataunit. - -Let us continue forming this model. -Our mathematical model for consistency $C$ will be able to define the time which distributed datastore require -to become fully consistent. Also let's denote $IC$ as a value calculated by probabilistic formula for the number of compare operations that should be done for each pair of nodes to find inconsistency. -Obviously, if the storage is consistent, the number of operations will be the maximum. It will allow to calculate the upper, lower boundary, average number of steps could be taken to find if the system is consistent or not. -In this paper our mathematical model for consistency $C$ will be able to define inconsistency degree in a given datastore (see Case study subsection), and afterwards will focus on time which distributed datastore require to become fully consistent and some other helpful metrics (see subsections ...) - - -\subsection{Case Study}\label{sec:experiments} - -Let's denote $IC$ as a value calculated by probabilistic formula for the number of compare operations that should be done for each pair of nodes to find inconsistency. -Obviously, if the storage is consistent, the number of operations will be the maximum. -Then the model will allow to calculate the upper, lower boundary, average number of steps could be -taken to find if the system is consistent or not. -We are thinking that having this formula will help us to eventually fully specify the mathematical model for consistency, so let it be one of mathematical model components. Let's claim some rules that can help to investigate -consistency. - - -{\color{red} Prove that having random topology the best algorithm to allocate masters and slaves -in the next manner: each master has those neighbors-slaves that are closest to it comparing -other master nodes.} - -Based on proposed hypothesis we want to check ... . -So the probability of that two nodes taken at random are from consistent subset is - -$p = \frac{n_c}{l(N_d)} * \frac{n_c - 1}{l(N_d) - 1} = \frac{n_c * (n_c - 1)}{l(N_d)* (l(N_d) -1)}$ where $n_c$ is the number of consistent nodes in the system at initial time $t$ (when we block the system and start investigating). - -Obviously, inconsistency probability then: - -$p_{ic} = 1 - p = 1 - \frac{n_c * (n_c - 1)}{l(N_d)* (l(N_d) -1)}$ -Taking into account that minimum number of consistent nodes will be equal to 1, and the maximum number of consistent nodes is equal to $l(N_d)$, we have following consequences: -\begin{itemize} -\item The system is fully consistent if $p = l(N_d) / l(N_d) = 1$ -\item The lower boundary for consistency probability is $1 / l(N_d)$ -\end{itemize} - -We developed the consistency formula for two nodes. Let's now extend it to more general one. -We still suppose that a data unit is represented by replicas on $N_d$ servers. Let's denote it as temporary $N$. -Let we have $K$ classes of mutually consistent replicas. -Then we denote by $N_k$ a number of replicas in $k^\mathrm{th}$ consistency class ($1\leq k0$ for all $k=1,\ldots,K$ and $N=N_1+\ldots+N_K$. -Such representations $N=N_1+\ldots+N_K$ are called integer partitions. - -\noindent Thus, in this case any integer partition describes some inconsistency state. - -\begin{example}\label{ex:partitions} -All integer partitions for $5$ are -\begin{center} -\begin{tabular}{lclcl} - 5 & & 4+1 & & 3+2\\ - 3+1+1 &\hspace*{10pt}& 2+2+1 &\hspace*{10pt}& 2+1+1+1\\ - 1+1+1+1+1 -\end{tabular} -\end{center} -\end{example} - -Taking into account this consideration we define inconsistency metric for a data unit in the term of the corresponding integer partition. -More details, let us suppose that the studied data unit $u$ is represented by $N$ replicas, which are being described by the integer partition $N=N_1,\ldots,M_K$ then the inconsistency metric $I(u)$ is defined by the formula -\begin{equation}\label{eq:metric} - I(u)=1-\sum_{k=1}^K\dfrac{N_k(N_k-1)}{N(N-1)}. -\end{equation} - -\begin{example}\label{ex:metric} -Let us suppose that a data unit $u$ are being stored on five servers. -Then the corresponding inconsistency states (see Example~\ref{ex:partitions}) have the following values of the inconsistency metric -\begin{center} -\begin{tabular}{lclcl} - $I(5)=0$ & & $I(4+1)=\frac{2}{5}$ & & $I(3+2)=\frac{3}{5}$\\ - $I(3+1+1)=\frac{7}{10}$ &\hspace*{10pt}& $I(2+2+1)=\frac{3}{4}$ - &\hspace*{10pt}& $I(2+1+1+1)=\frac{9}{10}$\\ - $I(1+1+1+1+1)=1$ -\end{tabular} -\end{center} -The meaning of $I(u)$ is the value of probability to establish the fact of inconsistency by the way of comparison two randomly chosen replicas. -\end{example} -Example~\ref{ex:metric} demonstrates that the proposed metric is equal to $0$ for the absolutely consistent data unit (the case 5) and is equal to $1$ for the absolutely inconsistent data unit (the case 1+1+1+1+1). - -This study had been checked by the following experimentation: we implemented a code that allows to test the accuracy of the inconsistency model described above. Partitions probability intervals for different partitions are demonstrating that the formulae is correct. To be more intuitive we took the same number of nodes and same partitions. - -It is obviously that we do not have exact matching, because the experiment is based on number of iterations where two random nodes are taken from a set of nodes and we count them consistent if they are in the same partition. -It is also obvious that for one consistent partition inconsistency will be equal $0$ and for maximum number of consistent partitions the inconsistency will be equal to $1$. - -\begin{figure} -\begin{subfigure}{0.5\linewidth} -\centering\includegraphics[scale=0.4]{images/1-consistent-partition.png}\hfill -\end{subfigure} -\begin{subfigure}{0.5\linewidth} -\centering\includegraphics[scale=0.4]{images/2-3-consistent-partitions-probability.png}\hfill -\end{subfigure} -\begin{subfigure}{0.5\linewidth} -\centering\includegraphics[scale=0.4]{images/1-4-consistent-partitions-probability.png} -\end{subfigure} -\begin{subfigure}{0.5\linewidth} -\centering\includegraphics[scale=0.4]{images/1-2-2-consistent-partitions-probability.png} -\end{subfigure} -\begin{subfigure}{0.5\linewidth} -\centering\includegraphics[scale=0.4]{images/1-1-3-consistent-partitions-probability.png} -\end{subfigure} -\begin{subfigure}{0.5\linewidth} -\centering\includegraphics[scale=0.4]{images/1-1-1-2-consistent-partitions-probability.png} -\end{subfigure} -\end{figure} - -\newpage - -\includegraphics[scale=0.4]{images/1-1-1-1-1-consistent-partitions-probability.png} - -\section{One Metric to Assess Consistency of Data} -{\color{red} This metric is derived and studied in case study, so this subsection is not needed anymore} -\section{Simulation Model to Assess Inconsistency Ratio of Data} -{\color{red} Should come in the end as annex} - -\subsection{Consistency probability} - -We want to calculate the maximum number of compare operations to find inconsistency. Let us imagine that the datastore is fully consistent. This will require comparing all nodes with each other. - -We also assume that one of two nodes to be compared are taken randomly except of already taken ones. So the algorithm is the following at first iteration we take two nodes at random, put out one of them if they are consistent and continue comparing with randomly taken nodes. Once we have two inconsistent nodes, the comparing ends. - -We have two types of events in such a system: two chosen nodes are consistent or two nodes are inconsistent. -Assume that $p$ is the probability that two nodes are consistent, and -$q = 1 -p$ - the probability that two nodes are inconsistent. -$l(N_d)$ -Then our sample space looks like: - -$\Omega = \{q, qp, qp^2, ..., qp^n\}$ - -Then the number of comparing operations is: - -$\vert\Omega\vert = \sum_{i=0}^{l(N_d)-1}qp^i$ - -From this formulae we have next constraints: -\begin{itemize} -\item The system is fully consistent if $\vert\Omega\vert = l(N_d)-1$ -\item The system is inconsistent when $1 <= \vert\Omega\vert <= l(N_d) -2$ -\end{itemize} - -Thus, in the end probability that the node is consistent at time t will be equal to number of consistent nodes (nodes with newest replica versions) $/ l(N_d)$, where $l(N_d)$ is the current length of subset $N_d$ (taking in account that each iteration we put put one node) - -\subsection{Convergence time complexity} - - -Now we are interested to calculate the time that can be taken for consistency convergence. -Let it be the trivial network where all links have capacity 1. Then each edge of graph has weight 1. -Let's imagine the nodes that are at the largest distance each from other. In the distributed datastore nodes are -broadcasting each to other in parallel. So the upper boundary of consistency in the worst case is the maximum of -shortest paths. It is well-known that this is diameter of the graph: - - -$n_ts = diameter(G)$. - - -Let's imagine now the real topology where the network graph topology is weighted. -Let the diameter be the path: - - -$P = [e_1....e_n]$, where $e_i$ has own weight. - - -Then time taken for consistency to converge is: - -$\sum_1^{n}w_i$ where $w_i$ is the weight of $i$ edge of the path $P$. - - -\subsection{Replica's actuality research} - -Let's also measure the number of steps to find the degree of consistency at a time $t$. -Our algorithm described above is complemented by that fact that if we find inconsistent nodes, -we are taking the node with latest replica timestamp. At each node meeting replica version equal to current maximum, we accumulate the count of such nodes. The count is dropped when the new current maximum is found. This is actually the algorithm of search of maximum number in a sequence and has known complexity - $O(N)$ comparisons. -Then, in our case it is $O(l(N_d))$ steps. - - - -\section{Remained studying}\label{sec:experiments} - -Экспериментальное исследование. -1. Смоделировать граф с нодами разной консистентности и вычислить среднее кол-во тайм слотов, которое может быть потрачено на нахождение inconsistency. - to be studied more. Мы вычислили вероятность, а не время consistency convergence. Выполнено на 50% - -Привести экспереименты с 2, 3, 4 разбиениями - -2. Показать когда система полностью консистентна - выполнено - -3. Показать, что приведение системы к консистентности - это кол-во тайм слотов от (1, диаметра графа). - выполнено - -4. Нахождение самой актуальной реплики и кол-во консистентных ей - сколько тайм слотов - выполнено - -Investigation what is better for fast consistency convergence: -group of masters close enough each to other (this almost replaces centralized server) -or group of masters allocated in far each from other but having close at least one of slaves. - -This needs statistic experiment - -\section{Inconsistency metric in various kinds of algorithms spreading replicas across DDS} -Все исследования сейчас основываются на предположении абсолютной надежности сети (отсутсвие network partitions) и отсутствие ограничений на пропускную способнсть (капасити линков равное единице). - -Вычислить на основе иммитационных экспериментов на графе метрику инконсистентности на разных алгоритмах (эпидемический). - -\section{Different topologies} -- Полносвязный граф -- Регулярный граф -- Рандомный граф - -- Граф, где писать нужно на определенные узлы (мастера). Проверить идею, насколько она лучше других, когда у каждого мастера есть примерно по одинковому кол-ву соседей - слейвов (Один слейв может быть соседом несколкьих мастеров, это не есть ограничением). Сравнить с вариантом, когда мастера сгруппированы в одном месте (сходится к ситуации централизованного хранилища и не имеет смысла). И с вариантом, когда мастера отдаленно друг от друга, а слейве где попало. -Внедрить разное капасити (edge weight) для линков. - -\section{Future work} -!!!! Отдельная секция про availability или на дальнейший ресерч - - -Алгоритм распространения-очищения реплик. Если даатаюнит часто запрашивается, то реплика его появляется там, где он часто запрашивается. Когда таймаут запроса к нему истечет (он больше не интересен), реплика его удаляется с этого места. -Исследовать, насколько может повыситься consistency и availability. - -- Внедрить возможность когда показатели надежности падают, network partitions возникают. - - -\section{Conclusion} - -\begin{thebibliography}{00} - -\bibitem{bib:c_ts} -Sanjay Kumar Madria: -Handling of Mutual Conflicts in Distributed Databases using Timestamps, -The Computer Journal. Vol. 41, No.\,6 (1998) - -\bibitem{bib:andrews} -Andrews,~G.\,E.: -The theory of partitions. -Addison-Wesley (1976) -\end{thebibliography} -\end{document} - diff --git "a/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/English paper/images/abstract-database-arch.jpg" "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/English paper/images/abstract-database-arch.jpg" new file mode 100644 index 0000000..af18565 Binary files /dev/null and "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/English paper/images/abstract-database-arch.jpg" differ diff --git "a/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/English paper/images/application-delivery-load-balancing-diagram-simple-1.png" "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/English paper/images/application-delivery-load-balancing-diagram-simple-1.png" new file mode 100644 index 0000000..c78f43a Binary files /dev/null and "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/English paper/images/application-delivery-load-balancing-diagram-simple-1.png" differ diff --git "a/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/English paper/images/new.uxf" "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/English paper/images/new.uxf" new file mode 100644 index 0000000..ab1f882 --- /dev/null +++ "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/English paper/images/new.uxf" @@ -0,0 +1,105 @@ + + + 10 + + UMLState + + 580 + 280 + 100 + 40 + + Proxy Level + + + + UMLState + + 760 + 400 + 180 + 40 + + Database Instance + + + + Relation + + 450 + 310 + 200 + 110 + + lt=<- + 10.0;90.0;180.0;10.0 + + + Relation + + 620 + 310 + 30 + 110 + + lt=<- + 10.0;90.0;10.0;10.0 + + + Relation + + 620 + 310 + 220 + 110 + + lt=<- +forwarded request + 200.0;90.0;10.0;10.0 + + + Relation + + 620 + 210 + 120 + 90 + + lt=<- +initial request + 10.0;70.0;10.0;10.0 + + + UMLState + + 540 + 400 + 180 + 40 + + Database Instance + + + + UMLState + + 340 + 400 + 180 + 40 + + Database Instance + + + + UMLState + + 580 + 180 + 100 + 40 + + client + + + diff --git "a/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/English paper/index.aux" "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/English paper/index.aux" new file mode 100644 index 0000000..c2966c3 --- /dev/null +++ "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/English paper/index.aux" @@ -0,0 +1,48 @@ +\relax +\providecommand \oddpage@label [2]{} +\@writefile{toc}{\contentsline {chapter}{\numberline {1}Hypothesis: Distributed Datastore: Handle request consistent}{4}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\@writefile{loa}{\addvspace {10\p@ }} +\citation{bib:brewer} +\@writefile{toc}{\contentsline {chapter}{\numberline {2}Load balancer handling solution and its estimates}{5}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\@writefile{loa}{\addvspace {10\p@ }} +\@writefile{toc}{\contentsline {chapter}{\numberline {3}Hybrid algorithm}{7}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\@writefile{loa}{\addvspace {10\p@ }} +\@writefile{toc}{\contentsline {chapter}{\numberline {4}Own load balancing algorithm estimates}{8}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\@writefile{loa}{\addvspace {10\p@ }} +\@writefile{toc}{\contentsline {chapter}{\numberline {5}Distributed hash table}{9}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\@writefile{loa}{\addvspace {10\p@ }} +\@writefile{toc}{\contentsline {chapter}{\numberline {6}Imitation model to communicate at load balancer level}{10}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\@writefile{loa}{\addvspace {10\p@ }} +\@writefile{toc}{\contentsline {chapter}{\numberline {7}Mathematical Model of ... }{11}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\@writefile{loa}{\addvspace {10\p@ }} +\@writefile{toc}{\contentsline {chapter}{\numberline {8}Estimates, time complexity of algorithm basing on lb balancer, distributed hash table}{12}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\@writefile{loa}{\addvspace {10\p@ }} +\bibcite{bib:prob_approach}{{1}{}{{}}{{}}} +\bibcite{bib:lb}{{2}{}{{}}{{}}} +\bibcite{bib:lb_mechanisms}{{3}{}{{}}{{}}} +\providecommand\NAT@force@numbers{}\NAT@force@numbers +\@writefile{toc}{\contentsline {chapter}{\numberline {9}Appendix: Load balancer, distributed hash table complexity estimates}{13}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\@writefile{loa}{\addvspace {10\p@ }} +\@writefile{toc}{\contentsline {likechapter}{\MakeUppercase {Biblography}}{13}} +\newlabel{LastPage}{{}{13}} +\xdef\lastpage@lastpage{13} +\gdef\lastpage@lastpageHy{} +\gdef\totfig{0}\gdef\tottab{0}\gdef\totref{3} diff --git "a/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/English paper/index.tex" "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/English paper/index.tex" new file mode 100644 index 0000000..f8667c3 --- /dev/null +++ "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/English paper/index.tex" @@ -0,0 +1,342 @@ +%\emph{\emph{•}} +% * 2017-11-19T14:02:18.924Z: +% +% ^. + +%\emph{\emph{•}} +% * 2017-11-19T14:02:18.924Z: +% +% ^. +\documentclass{report} +% +\usepackage{amsmath} +\usepackage{amsfonts} +\usepackage{amssymb} +\usepackage{graphicx} +\usepackage{subcaption} +\captionsetup{compatibility=false} +\usepackage{url} +\usepackage[usenames]{color} + +\usepackage{lipsum} % stab +%\linespread{1.3} % полуторный интервал +\renewcommand{\rmdefault}{ftm} % Times New Roman +\frenchspacing +\usepackage{fancyhdr} +\pagestyle{fancy} +\fancyhf{} +%\fancyhead[R]{\thepage} +%\fancyheadoffset{0mm} +%\fancyfootoffset{0mm} +%\setlength{\headheight}{17pt} +%\renewcommand{\headrulewidth}{0pt} +%\renewcommand{\footrulewidth}{0pt} +\fancypagestyle{plain}{ + \fancyhf{} + \rhead{\thepage}} +\setcounter{page}{2} % начать нумерацию страниц с №2 +% +\usepackage[tableposition=top]{caption} +\usepackage{subcaption} +\DeclareCaptionLabelFormat{gostfigure}{Figure 2} +\DeclareCaptionLabelFormat{gosttable}{Table 2} +\DeclareCaptionLabelSeparator{gost}{~---~} +\captionsetup{labelsep=gost} +\captionsetup[figure]{labelformat=gostfigure} +\captionsetup[table]{labelformat=gosttable} +\renewcommand{\thesubfigure}{\asbuk{subfigure}} +% +\usepackage{amssymb} +\usepackage{stmaryrd} +\usepackage[ruled,linesnumbered]{algorithm2e} +\usepackage{multirow} +%\usepackage{titlesec} +% +%\titleformat{\chapter}[display] +% {\filcenter} +% {\MakeUppercase{\chaptertitlename} \thechapter} +% {14pt} +% {\bfseries}{} +% +%\titleformat{\section} +% {\normalsize\bfseries} +% {\thesection} +% {1em}{} +% +%\titleformat{\subsection} +% {\normalsize\bfseries} +% {\thesubsection} +% {1em}{} +% +% Настройка вертикальных и горизонтальных отступов +%\titlespacing*{\chapter}{0pt}{-30pt}{8pt} +%\titlespacing*{\section}{\parindent}{*4}{*4} +%\titlespacing*{\subsection}{\parindent}{*4}{*4} + +\usepackage{geometry} +%\geometry{left=3cm} +%\geometry{right=1.5cm} +%\geometry{top=2.4cm} +%\geometry{bottom=2.4cm} +% +\usepackage{enumitem} +\makeatletter + \AddEnumerateCounter{\asbuk}{\@asbuk}{м)} +\makeatother +\setlist{nolistsep} +\renewcommand{\labelitemi}{-} +\renewcommand{\labelenumi}{\asbuk{enumi})} +\renewcommand{\labelenumii}{\arabic{enumii})} +% +%БЛОК ДЛЯ ОГЛАВЛЕНИЯ +\usepackage{tocloft} +%\renewcommand{\cfttoctitlefont}{\hspace{0.38\textwidth} \bfseries\MakeUppercase} +%\renewcommand{\cftbeforetoctitleskip}{-1em} +\renewcommand{\cftaftertoctitle}{\mbox{}\hfill \\ \mbox{}\hfill{\footnotesize Page.}\vspace{-2.5em}} +\renewcommand{\cftchapfont}{\normalsize\bfseries \MakeUppercase{\chaptername} } +\renewcommand{\cftsecfont}{\hspace{31pt}} +\renewcommand{\cftsubsecfont}{\hspace{11pt}} +\renewcommand{\cftbeforechapskip}{1em} +\renewcommand{\cftparskip}{-1mm} +\renewcommand{\cftdotsep}{1} +\setcounter{tocdepth}{2} % задать глубину оглавления — до subsection включительно +% +%для специальных разделов (аннотаций, вступлений списка сокращений, выводов, списка литературы) +\newcommand{\empline}{\mbox{}\newline} +\newcommand{\likechapterheading}[1]{ + \begin{center} + \textbf{\MakeUppercase{#1}} + \end{center} + \empline} +% + +\makeatletter + \renewcommand{\@dotsep}{2} + \newcommand{\l@likechapter}[2]{{\bfseries\@dottedtocline{0}{0pt}{0pt}{#1}{#2}}} +\makeatother +\newcommand{\likechapter}[1]{ + \likechapterheading{#1} + \addcontentsline{toc}{likechapter}{\MakeUppercase{#1}}} +% +\usepackage[square,numbers,sort&compress]{natbib} +\renewcommand{\bibnumfmt}[1]{#1.\hfill} % нумерация источников в самом списке — через точку +\renewcommand{\bibsection}{\likechapter{Biblography}} % заголовок специального раздела +\setlength{\bibsep}{0pt} +% +%для подсчетов глав и т.д. +\usepackage{lastpage} +% ... +%Дипломная работа: \pageref*{LastPage}~с., ... +\newcounter{totfigures} +\newcounter{tottables} +\makeatletter + \AtEndDocument{% + \addtocounter{totfigures}{\value{figure}}% + \addtocounter{tottables}{\value{table}}% + \immediate\write\@mainaux{% + \string\gdef\string\totfig{\number\value{totfigures}}% + \string\gdef\string\tottab{\number\value{tottables}}% + \string\gdef\string\totref{\number\value{totreferences}}% + }% + } +\makeatother +% ... +%Дипломная работа: \pageref*{LastPage}~с., \totfig~рис., \tottab~табл... +% +%для автоматизации увеличений счетчика +\usepackage{etoolbox} +\pretocmd{\chapter}{\addtocounter{totfigures}{\value{figure}}}{}{} +\pretocmd{\chapter}{\addtocounter{tottables}{\value{table}}}{}{} +% +\newcounter{totreferences} +\pretocmd{\bibitem}{\addtocounter{totreferences}{1}}{}{} +% +%для встраивания приложений +\usepackage[title,titletoc]{appendix} + +%\titleformat{\paragraph}[display] +% {\filcenter} +% {\MakeUppercase{\chaptertitlename} \thechapter} +% {8pt} +% {\bfseries}{} +%\titlespacing*{\paragraph}{0pt}{-30pt}{8pt} + +\newcommand{\append}[1]{ + \clearpage + \stepcounter{chapter} + \paragraph{\MakeUppercase{#1}} + \empline + \addcontentsline{toc}{likechapter}{\MakeUppercase{\chaptertitlename~\Asbuk{chapter}\;#1}}} + +\sloppy +\begin{document} +\tableofcontents + +\chapter*{Introduction} +Nowadays innovations are growing fast and existing technologies are evolving. Hyperloop, exploring the universe, science research work, green systems and more daily, but so needed things, such as transport, +smart homes, communication technologies... +The fact, that they require more power, space, flexibility, reliability and speed, should not be overlooked. +One of important component for lots of kinds of such innovations is fast and reliable storage. +In 21th century the term "distributed datastore" became habitual for usage. And some distributed datastores +are growing, some do not. Why? There is a reason that have a great impact on fast growth of such a datastore, +when they lose consistency value as soon as they become larger. For some of systems it is very important +part of their stable work. + +There is a well-know theorem, called CAP, that claims that it is impossible to satisfy fully consistency, avaliability and partition tolerance value simultaneously. + +We do not argue this theorem, but what we do - try to get round this problem. +We explain the idea in detail in the first chapter. + +\chapter{Hypothesis: request handler for datastore to balance consistency} + +It is well-known fact that according CAP-theorem it is impossible to support strong consistency and not to lose availability. In this chapter we make attempt to reach compromise and ensure or increase consistency value for any distributed datastore without losing availability and partition tolerance. +We would like to introduce the idea first and then estimate its impact availability and partition tolerance. + +So let us go deeper into a problem. + +Imagine we have a distributed datastore that has N nodes. We do not take into account for now role of each node +(master or slave) and assume that each node can accept read and write requests. Now we focus on the mechanism +of database request accepting and processing. If one of nodes accepted write request, we claim that the +datastore system will reach fast enough of consistency value to maintain consistent response. + +What if to try to get round this problem by handling request to database by the list of consistent nodes for. appropriate to the dataunit incoming in the request. +We want to estimate how it may impact availability and partition tolerance if we want to +get round consistency issue this way. + +There are several solutions. But they all have general architecture: +(Picture of architecture) + +\centering\includegraphics[scale=0.4]{images/abstract-database-arch.jpg}\hfill +This architecture may have several implementations: +\begin{itemize} +\item load balancer level - load balancer may include or implement this solution +\item hybrid: application level - it may be done as an own separate algorithm working on the top of request handling. +\item manual redirection between nodes at the database level +\end{itemize} + +Добавить общие понятия, load balancer, distributed hash table + +We want to compare the architecture value of all of these solutions and propose the best one. +In the next section we consider load balancer level solution, in the section 2 - hybrid and in the section 3 - manual redirection at database level. + +\chapter{Load balancer handling solution and its estimates} + +Firstly let us remind what load balancer is. +From \cite{bib:brewer} load balancing is the technique that distributes the workload across multiple devices. +Generally it stands behind several web servers. It is most relevant to describe load balancer by the following scheme: + +\centering\includegraphics[scale=0.4]{images/application-delivery-load-balancing-diagram-simple-1.png} + +Load balancer distributes traffic by different mechanisms. + + +They are : +\begin{itemize} +\item[Round robin] default load balancing method. Round Robin mode passes each new connection request to the next server in line, eventually distributing connections evenly across the array of machines being load balanced. +\item[Weighted least] +\item[Ratio] The BIG-IP system distributes connections among pool members or nodes in a static rotation according to ratio weights that you define. In this case, the number of connections that each system receives over time is proportionate to the ratio weight you defined for each pool member or node. You set a ratio weight when you create each pool member or node. +\item[Dynamic Ratio] The Dynamic Ratio methods select a server based on various aspects of real-time server performance analysis. These methods are similar to the Ratio methods, except that with Dynamic Ratio methods, the ratio weights are system-generated, and the values of the ratio weights are not static. These methods are based on continuous monitoring of the servers, and the ratio weights are therefore continually changing +\item[Fastest (node) Fastest (application)] The Fastest methods select a server based on the least number of current sessions. +\item[Least Connections ]The Least Connections methods are relatively simple in that the BIG-IP system passes a new connection to the pool member or node that has the least number of active connections. +..... +\end{itemize} + + +The way load balancer distributes traffic, lie on the hypothesis in the perfect way (see previous chapter). + +Propose architecture (scheme). + +Haproxy requires less additional feature to support our needs or even already implements them. + +Consistent hashing algorithm or algorithm custom that takes list of available nodes from the request and load balance between them. + +Focus on the state of the node. + + +The purpose of our load balancing technique is to redirect request to nodes that are already consistent making decision on the request. + +Let's focus on dynamic ratio method. + + +Conclusion for this section: Nowadays there is lack of load balancers implementation that can support our need. +But a lot of them are opensource solutions and may be extended soon. + + +How many nodes at maximum load balancer supports +\chapter{Hybrid algorithm} +Other is described in next section (Algorithm) +\chapter{Own load balancing algorithm estimates} +Possibility to add it to load balancer +Where to get consistent nodes list from. + +(Hash Table? masy be. another db? no. separate API? it anyway will take list from dynamic dict.) +so hash table to store nodes, its structure, evaluation of requests + +\chapter{Distributed hash table} +What is distributed hash table and its implementations + + + +The maximum size of hash table + + +Performance of different storages (redis, ...). + + +Formulas to keep it stably fast. +Formula for number of nodes for DDS and number of keys in hash table (numbers of dataunits). + +Hash Table performance (read/write requests per second) - data from site, performance etc. + + +\chapter{Imitation model to communicate at load balancer level} +Architecture, diagrams, or experiments with algorithm +sequence , activity diagrams for all three solutions. + +To redirect over consistent nodes on API layer is a solution that delays response a lot. +Request come to not consistent node then redeirected to consistent node, but it is not alive, +then eventually come to the proper node. This solution is best to implement on load balancer algorithm level: get the consistent nodes and load balance between them by any enabled default algorithm (round robin, least response time, ...) + +But estimate both solutions. + +Имитационная модель для КАЖДОГО из solutions. + +\chapter{Mathematical Model of ... } +and model to increase consistency value. + + +Let we have distributed datastore with such characteristics: +\begin{tabular*}{\textwidth}{cp{0.5cm}p{0.8\textwidth}} +$N$&& is a finite set of nodes of a distributed datastore; \\ +$L$&& is a finite set of links of a distributed datastore; \\ +$\partial:L\rightarrow 2^N$&& is a mapping that associates each link with two nodes that it binds;\\ +$D$&& is a finite set of stored data units;\\ +$r:D\rightarrow 2^N$&& is a mapping that associates each data unit $d$ with a subset of nodes +that store its replica; \\ + +$N_d$&& is a finite set of nodes that are having given dataunit $d$; \\ +$l(N_d)$&& is a number of nodes in datastore that are having given dataunit; \\ +$n_c$&& is a number of nodes in a subset of $N_d$ where all nodes have the same replica. +\end{tabular*} +\chapter{Estimates, time complexity of algorithm basing on lb balancer, distributed hash table} +\chapter{Appendix: Load balancer, distributed hash table complexity estimates} +\begin{thebibliography}{00} + +\bibitem{bib:prob_approach} +Kyrylo Rukkas, Galyna Zholtkevych: +Distributed Datastores: Towards Probabilistic Approach for Estimation of Dependability, +ICTERI 2015: 523-534 + + +\bibitem{bib:lb} +P.P. Geethu Gopinatha, Shriram K.Vasudevan: +An In-depth Analysis and Study of Load Balancing Techniques in the Cloud Computing Environment, Procedia Computer Science Volume 50, 2015, Pages 427-432 +https://www.sciencedirect.com/science/article/pii/S1877050915005104 +https://devcentral.f5.com/articles/what-is-load-balancing-24740 + +\bibitem{bib:lb_mechanisms} + +% https://help.utk.edu/kb/index2.php?func=show&e=1699 + +\end{thebibliography} +\end{document} diff --git "a/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/English paper/index.toc" "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/English paper/index.toc" new file mode 100644 index 0000000..0b4bdc2 --- /dev/null +++ "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/English paper/index.toc" @@ -0,0 +1,10 @@ +\contentsline {chapter}{\numberline {1}Hypothesis: Distributed Datastore: Handle request consistent}{4} +\contentsline {chapter}{\numberline {2}Load balancer handling solution and its estimates}{5} +\contentsline {chapter}{\numberline {3}Hybrid algorithm}{7} +\contentsline {chapter}{\numberline {4}Own load balancing algorithm estimates}{8} +\contentsline {chapter}{\numberline {5}Distributed hash table}{9} +\contentsline {chapter}{\numberline {6}Imitation model to communicate at load balancer level}{10} +\contentsline {chapter}{\numberline {7}Mathematical Model of ... }{11} +\contentsline {chapter}{\numberline {8}Estimates, time complexity of algorithm basing on lb balancer, distributed hash table}{12} +\contentsline {chapter}{\numberline {9}Appendix: Load balancer, distributed hash table complexity estimates}{13} +\contentsline {likechapter}{\MakeUppercase {Biblography}}{13} diff --git "a/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/English paper/llncs.cls" "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/English paper/llncs.cls" new file mode 100644 index 0000000..93c802e --- /dev/null +++ "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/English paper/llncs.cls" @@ -0,0 +1,1207 @@ +% LLNCS DOCUMENT CLASS -- version 2.17 (12-Jul-2010) +% Springer Verlag LaTeX2e support for Lecture Notes in Computer Science +% +%% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +%% +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesClass{llncs}[2010/07/12 v2.17 +^^J LaTeX document class for Lecture Notes in Computer Science] +% Options +\let\if@envcntreset\iffalse +\DeclareOption{envcountreset}{\let\if@envcntreset\iftrue} +\DeclareOption{citeauthoryear}{\let\citeauthoryear=Y} +\DeclareOption{oribibl}{\let\oribibl=Y} +\let\if@custvec\iftrue +\DeclareOption{orivec}{\let\if@custvec\iffalse} +\let\if@envcntsame\iffalse +\DeclareOption{envcountsame}{\let\if@envcntsame\iftrue} +\let\if@envcntsect\iffalse +\DeclareOption{envcountsect}{\let\if@envcntsect\iftrue} +\let\if@runhead\iffalse +\DeclareOption{runningheads}{\let\if@runhead\iftrue} + +\let\if@openright\iftrue +\let\if@openbib\iffalse +\DeclareOption{openbib}{\let\if@openbib\iftrue} + +% languages +\let\switcht@@therlang\relax +\def\ds@deutsch{\def\switcht@@therlang{\switcht@deutsch}} +\def\ds@francais{\def\switcht@@therlang{\switcht@francais}} + +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} + +\ProcessOptions + +\LoadClass[twoside]{article} +\RequirePackage{multicol} % needed for the list of participants, index +\RequirePackage{aliascnt} + +\setlength{\textwidth}{12.2cm} +\setlength{\textheight}{19.3cm} +\renewcommand\@pnumwidth{2em} +\renewcommand\@tocrmarg{3.5em} +% +\def\@dottedtocline#1#2#3#4#5{% + \ifnum #1>\c@tocdepth \else + \vskip \z@ \@plus.2\p@ + {\leftskip #2\relax \rightskip \@tocrmarg \advance\rightskip by 0pt plus 2cm + \parfillskip -\rightskip \pretolerance=10000 + \parindent #2\relax\@afterindenttrue + \interlinepenalty\@M + \leavevmode + \@tempdima #3\relax + \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip + {#4}\nobreak + \leaders\hbox{$\m@th + \mkern \@dotsep mu\hbox{.}\mkern \@dotsep + mu$}\hfill + \nobreak + \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}% + \par}% + \fi} +% +\def\switcht@albion{% +\def\abstractname{Abstract.} +\def\ackname{Acknowledgement.} +\def\andname{and} +\def\lastandname{\unskip, and} +\def\appendixname{Appendix} +\def\chaptername{Chapter} +\def\claimname{Claim} +\def\conjecturename{Conjecture} +\def\contentsname{Table of Contents} +\def\corollaryname{Corollary} +\def\definitionname{Definition} +\def\examplename{Example} +\def\exercisename{Exercise} +\def\figurename{Fig.} +\def\keywordname{{\bf Keywords:}} +\def\indexname{Index} +\def\lemmaname{Lemma} +\def\contriblistname{List of Contributors} +\def\listfigurename{List of Figures} +\def\listtablename{List of Tables} +\def\mailname{{\it Correspondence to\/}:} +\def\noteaddname{Note added in proof} +\def\notename{Note} +\def\partname{Part} +\def\problemname{Problem} +\def\proofname{Proof} +\def\propertyname{Property} +\def\propositionname{Proposition} +\def\questionname{Question} +\def\remarkname{Remark} +\def\seename{see} +\def\solutionname{Solution} +\def\subclassname{{\it Subject Classifications\/}:} +\def\tablename{Table} +\def\theoremname{Theorem}} +\switcht@albion +% Names of theorem like environments are already defined +% but must be translated if another language is chosen +% +% French section +\def\switcht@francais{%\typeout{On parle francais.}% + \def\abstractname{R\'esum\'e.}% + \def\ackname{Remerciements.}% + \def\andname{et}% + \def\lastandname{ et}% + \def\appendixname{Appendice} + \def\chaptername{Chapitre}% + \def\claimname{Pr\'etention}% + \def\conjecturename{Hypoth\`ese}% + \def\contentsname{Table des mati\`eres}% + \def\corollaryname{Corollaire}% + \def\definitionname{D\'efinition}% + \def\examplename{Exemple}% + \def\exercisename{Exercice}% + \def\figurename{Fig.}% + \def\keywordname{{\bf Mots-cl\'e:}} + \def\indexname{Index} + \def\lemmaname{Lemme}% + \def\contriblistname{Liste des contributeurs} + \def\listfigurename{Liste des figures}% + \def\listtablename{Liste des tables}% + \def\mailname{{\it Correspondence to\/}:} + \def\noteaddname{Note ajout\'ee \`a l'\'epreuve}% + \def\notename{Remarque}% + \def\partname{Partie}% + \def\problemname{Probl\`eme}% + \def\proofname{Preuve}% + \def\propertyname{Caract\'eristique}% +%\def\propositionname{Proposition}% + \def\questionname{Question}% + \def\remarkname{Remarque}% + \def\seename{voir} + \def\solutionname{Solution}% + \def\subclassname{{\it Subject Classifications\/}:} + \def\tablename{Tableau}% + \def\theoremname{Th\'eor\`eme}% +} +% +% German section +\def\switcht@deutsch{%\typeout{Man spricht deutsch.}% + \def\abstractname{Zusammenfassung.}% + \def\ackname{Danksagung.}% + \def\andname{und}% + \def\lastandname{ und}% + \def\appendixname{Anhang}% + \def\chaptername{Kapitel}% + \def\claimname{Behauptung}% + \def\conjecturename{Hypothese}% + \def\contentsname{Inhaltsverzeichnis}% + \def\corollaryname{Korollar}% +%\def\definitionname{Definition}% + \def\examplename{Beispiel}% + \def\exercisename{\"Ubung}% + \def\figurename{Abb.}% + \def\keywordname{{\bf Schl\"usselw\"orter:}} + \def\indexname{Index} +%\def\lemmaname{Lemma}% + \def\contriblistname{Mitarbeiter} + \def\listfigurename{Abbildungsverzeichnis}% + \def\listtablename{Tabellenverzeichnis}% + \def\mailname{{\it Correspondence to\/}:} + \def\noteaddname{Nachtrag}% + \def\notename{Anmerkung}% + \def\partname{Teil}% +%\def\problemname{Problem}% + \def\proofname{Beweis}% + \def\propertyname{Eigenschaft}% +%\def\propositionname{Proposition}% + \def\questionname{Frage}% + \def\remarkname{Anmerkung}% + \def\seename{siehe} + \def\solutionname{L\"osung}% + \def\subclassname{{\it Subject Classifications\/}:} + \def\tablename{Tabelle}% +%\def\theoremname{Theorem}% +} + +% Ragged bottom for the actual page +\def\thisbottomragged{\def\@textbottom{\vskip\z@ plus.0001fil +\global\let\@textbottom\relax}} + +\renewcommand\small{% + \@setfontsize\small\@ixpt{11}% + \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@ + \abovedisplayshortskip \z@ \@plus2\p@ + \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@ + \def\@listi{\leftmargin\leftmargini + \parsep 0\p@ \@plus1\p@ \@minus\p@ + \topsep 8\p@ \@plus2\p@ \@minus4\p@ + \itemsep0\p@}% + \belowdisplayskip \abovedisplayskip +} + +\frenchspacing +\widowpenalty=10000 +\clubpenalty=10000 + +\setlength\oddsidemargin {63\p@} +\setlength\evensidemargin {63\p@} +\setlength\marginparwidth {90\p@} + +\setlength\headsep {16\p@} + +\setlength\footnotesep{7.7\p@} +\setlength\textfloatsep{8mm\@plus 2\p@ \@minus 4\p@} +\setlength\intextsep {8mm\@plus 2\p@ \@minus 2\p@} + +\setcounter{secnumdepth}{2} + +\newcounter {chapter} +\renewcommand\thechapter {\@arabic\c@chapter} + +\newif\if@mainmatter \@mainmattertrue +\newcommand\frontmatter{\cleardoublepage + \@mainmatterfalse\pagenumbering{Roman}} +\newcommand\mainmatter{\cleardoublepage + \@mainmattertrue\pagenumbering{arabic}} +\newcommand\backmatter{\if@openright\cleardoublepage\else\clearpage\fi + \@mainmatterfalse} + +\renewcommand\part{\cleardoublepage + \thispagestyle{empty}% + \if@twocolumn + \onecolumn + \@tempswatrue + \else + \@tempswafalse + \fi + \null\vfil + \secdef\@part\@spart} + +\def\@part[#1]#2{% + \ifnum \c@secnumdepth >-2\relax + \refstepcounter{part}% + \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}% + \else + \addcontentsline{toc}{part}{#1}% + \fi + \markboth{}{}% + {\centering + \interlinepenalty \@M + \normalfont + \ifnum \c@secnumdepth >-2\relax + \huge\bfseries \partname~\thepart + \par + \vskip 20\p@ + \fi + \Huge \bfseries #2\par}% + \@endpart} +\def\@spart#1{% + {\centering + \interlinepenalty \@M + \normalfont + \Huge \bfseries #1\par}% + \@endpart} +\def\@endpart{\vfil\newpage + \if@twoside + \null + \thispagestyle{empty}% + \newpage + \fi + \if@tempswa + \twocolumn + \fi} + +\newcommand\chapter{\clearpage + \thispagestyle{empty}% + \global\@topnum\z@ + \@afterindentfalse + \secdef\@chapter\@schapter} +\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}% + {\protect\numberline{\thechapter}#1}% + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \chaptermark{#1}% + \addtocontents{lof}{\protect\addvspace{10\p@}}% + \addtocontents{lot}{\protect\addvspace{10\p@}}% + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterheading + \fi} +\def\@makechapterhead#1{% +% \vspace*{50\p@}% + {\centering + \ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \large\bfseries \@chapapp{} \thechapter + \par\nobreak + \vskip 20\p@ + \fi + \fi + \interlinepenalty\@M + \Large \bfseries #1\par\nobreak + \vskip 40\p@ + }} +\def\@schapter#1{\if@twocolumn + \@topnewpage[\@makeschapterhead{#1}]% + \else + \@makeschapterhead{#1}% + \@afterheading + \fi} +\def\@makeschapterhead#1{% +% \vspace*{50\p@}% + {\centering + \normalfont + \interlinepenalty\@M + \Large \bfseries #1\par\nobreak + \vskip 40\p@ + }} + +\renewcommand\section{\@startsection{section}{1}{\z@}% + {-18\p@ \@plus -4\p@ \@minus -4\p@}% + {12\p@ \@plus 4\p@ \@minus 4\p@}% + {\normalfont\large\bfseries\boldmath + \rightskip=\z@ \@plus 8em\pretolerance=10000 }} +\renewcommand\subsection{\@startsection{subsection}{2}{\z@}% + {-18\p@ \@plus -4\p@ \@minus -4\p@}% + {8\p@ \@plus 4\p@ \@minus 4\p@}% + {\normalfont\normalsize\bfseries\boldmath + \rightskip=\z@ \@plus 8em\pretolerance=10000 }} +\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% + {-18\p@ \@plus -4\p@ \@minus -4\p@}% + {-0.5em \@plus -0.22em \@minus -0.1em}% + {\normalfont\normalsize\bfseries\boldmath}} +\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}% + {-12\p@ \@plus -4\p@ \@minus -4\p@}% + {-0.5em \@plus -0.22em \@minus -0.1em}% + {\normalfont\normalsize\itshape}} +\renewcommand\subparagraph[1]{\typeout{LLNCS warning: You should not use + \string\subparagraph\space with this class}\vskip0.5cm +You should not use \verb|\subparagraph| with this class.\vskip0.5cm} + +\DeclareMathSymbol{\Gamma}{\mathalpha}{letters}{"00} +\DeclareMathSymbol{\Delta}{\mathalpha}{letters}{"01} +\DeclareMathSymbol{\Theta}{\mathalpha}{letters}{"02} +\DeclareMathSymbol{\Lambda}{\mathalpha}{letters}{"03} +\DeclareMathSymbol{\Xi}{\mathalpha}{letters}{"04} +\DeclareMathSymbol{\Pi}{\mathalpha}{letters}{"05} +\DeclareMathSymbol{\Sigma}{\mathalpha}{letters}{"06} +\DeclareMathSymbol{\Upsilon}{\mathalpha}{letters}{"07} +\DeclareMathSymbol{\Phi}{\mathalpha}{letters}{"08} +\DeclareMathSymbol{\Psi}{\mathalpha}{letters}{"09} +\DeclareMathSymbol{\Omega}{\mathalpha}{letters}{"0A} + +\let\footnotesize\small + +\if@custvec +\def\vec#1{\mathchoice{\mbox{\boldmath$\displaystyle#1$}} +{\mbox{\boldmath$\textstyle#1$}} +{\mbox{\boldmath$\scriptstyle#1$}} +{\mbox{\boldmath$\scriptscriptstyle#1$}}} +\fi + +\def\squareforqed{\hbox{\rlap{$\sqcap$}$\sqcup$}} +\def\qed{\ifmmode\squareforqed\else{\unskip\nobreak\hfil +\penalty50\hskip1em\null\nobreak\hfil\squareforqed +\parfillskip=0pt\finalhyphendemerits=0\endgraf}\fi} + +\def\getsto{\mathrel{\mathchoice {\vcenter{\offinterlineskip +\halign{\hfil +$\displaystyle##$\hfil\cr\gets\cr\to\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\gets +\cr\to\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr\gets +\cr\to\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr +\gets\cr\to\cr}}}}} +\def\lid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil +$\displaystyle##$\hfil\cr<\cr\noalign{\vskip1.2pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr<\cr +\noalign{\vskip1.2pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr<\cr +\noalign{\vskip1pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr +<\cr +\noalign{\vskip0.9pt}=\cr}}}}} +\def\gid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil +$\displaystyle##$\hfil\cr>\cr\noalign{\vskip1.2pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr>\cr +\noalign{\vskip1.2pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr>\cr +\noalign{\vskip1pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr +>\cr +\noalign{\vskip0.9pt}=\cr}}}}} +\def\grole{\mathrel{\mathchoice {\vcenter{\offinterlineskip +\halign{\hfil +$\displaystyle##$\hfil\cr>\cr\noalign{\vskip-1pt}<\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr +>\cr\noalign{\vskip-1pt}<\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr +>\cr\noalign{\vskip-0.8pt}<\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr +>\cr\noalign{\vskip-0.3pt}<\cr}}}}} +\def\bbbr{{\rm I\!R}} %reelle Zahlen +\def\bbbm{{\rm I\!M}} +\def\bbbn{{\rm I\!N}} %natuerliche Zahlen +\def\bbbf{{\rm I\!F}} +\def\bbbh{{\rm I\!H}} +\def\bbbk{{\rm I\!K}} +\def\bbbp{{\rm I\!P}} +\def\bbbone{{\mathchoice {\rm 1\mskip-4mu l} {\rm 1\mskip-4mu l} +{\rm 1\mskip-4.5mu l} {\rm 1\mskip-5mu l}}} +\def\bbbc{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm C$}\hbox{\hbox +to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\textstyle\rm C$}\hbox{\hbox +to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptstyle\rm C$}\hbox{\hbox +to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptscriptstyle\rm C$}\hbox{\hbox +to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}}} +\def\bbbq{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm +Q$}\hbox{\raise +0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}} +{\setbox0=\hbox{$\textstyle\rm Q$}\hbox{\raise +0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptstyle\rm Q$}\hbox{\raise +0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptscriptstyle\rm Q$}\hbox{\raise +0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}}} +\def\bbbt{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm +T$}\hbox{\hbox to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\textstyle\rm T$}\hbox{\hbox +to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptstyle\rm T$}\hbox{\hbox +to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptscriptstyle\rm T$}\hbox{\hbox +to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}}} +\def\bbbs{{\mathchoice +{\setbox0=\hbox{$\displaystyle \rm S$}\hbox{\raise0.5\ht0\hbox +to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox +to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}} +{\setbox0=\hbox{$\textstyle \rm S$}\hbox{\raise0.5\ht0\hbox +to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox +to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptstyle \rm S$}\hbox{\raise0.5\ht0\hbox +to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox +to0pt{\kern0.5\wd0\vrule height0.45\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptscriptstyle\rm S$}\hbox{\raise0.5\ht0\hbox +to0pt{\kern0.4\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox +to0pt{\kern0.55\wd0\vrule height0.45\ht0\hss}\box0}}}} +\def\bbbz{{\mathchoice {\hbox{$\mathsf\textstyle Z\kern-0.4em Z$}} +{\hbox{$\mathsf\textstyle Z\kern-0.4em Z$}} +{\hbox{$\mathsf\scriptstyle Z\kern-0.3em Z$}} +{\hbox{$\mathsf\scriptscriptstyle Z\kern-0.2em Z$}}}} + +\let\ts\, + +\setlength\leftmargini {17\p@} +\setlength\leftmargin {\leftmargini} +\setlength\leftmarginii {\leftmargini} +\setlength\leftmarginiii {\leftmargini} +\setlength\leftmarginiv {\leftmargini} +\setlength \labelsep {.5em} +\setlength \labelwidth{\leftmargini} +\addtolength\labelwidth{-\labelsep} + +\def\@listI{\leftmargin\leftmargini + \parsep 0\p@ \@plus1\p@ \@minus\p@ + \topsep 8\p@ \@plus2\p@ \@minus4\p@ + \itemsep0\p@} +\let\@listi\@listI +\@listi +\def\@listii {\leftmargin\leftmarginii + \labelwidth\leftmarginii + \advance\labelwidth-\labelsep + \topsep 0\p@ \@plus2\p@ \@minus\p@} +\def\@listiii{\leftmargin\leftmarginiii + \labelwidth\leftmarginiii + \advance\labelwidth-\labelsep + \topsep 0\p@ \@plus\p@\@minus\p@ + \parsep \z@ + \partopsep \p@ \@plus\z@ \@minus\p@} + +\renewcommand\labelitemi{\normalfont\bfseries --} +\renewcommand\labelitemii{$\m@th\bullet$} + +\setlength\arraycolsep{1.4\p@} +\setlength\tabcolsep{1.4\p@} + +\def\tableofcontents{\chapter*{\contentsname\@mkboth{{\contentsname}}% + {{\contentsname}}} + \def\authcount##1{\setcounter{auco}{##1}\setcounter{@auth}{1}} + \def\lastand{\ifnum\value{auco}=2\relax + \unskip{} \andname\ + \else + \unskip \lastandname\ + \fi}% + \def\and{\stepcounter{@auth}\relax + \ifnum\value{@auth}=\value{auco}% + \lastand + \else + \unskip, + \fi}% + \@starttoc{toc}\if@restonecol\twocolumn\fi} + +\def\l@part#1#2{\addpenalty{\@secpenalty}% + \addvspace{2em plus\p@}% % space above part line + \begingroup + \parindent \z@ + \rightskip \z@ plus 5em + \hrule\vskip5pt + \large % same size as for a contribution heading + \bfseries\boldmath % set line in boldface + \leavevmode % TeX command to enter horizontal mode. + #1\par + \vskip5pt + \hrule + \vskip1pt + \nobreak % Never break after part entry + \endgroup} + +\def\@dotsep{2} + +\let\phantomsection=\relax + +\def\hyperhrefextend{\ifx\hyper@anchor\@undefined\else +{}\fi} + +\def\addnumcontentsmark#1#2#3{% +\addtocontents{#1}{\protect\contentsline{#2}{\protect\numberline + {\thechapter}#3}{\thepage}\hyperhrefextend}}% +\def\addcontentsmark#1#2#3{% +\addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}\hyperhrefextend}}% +\def\addcontentsmarkwop#1#2#3{% +\addtocontents{#1}{\protect\contentsline{#2}{#3}{0}\hyperhrefextend}}% + +\def\@adcmk[#1]{\ifcase #1 \or +\def\@gtempa{\addnumcontentsmark}% + \or \def\@gtempa{\addcontentsmark}% + \or \def\@gtempa{\addcontentsmarkwop}% + \fi\@gtempa{toc}{chapter}% +} +\def\addtocmark{% +\phantomsection +\@ifnextchar[{\@adcmk}{\@adcmk[3]}% +} + +\def\l@chapter#1#2{\addpenalty{-\@highpenalty} + \vskip 1.0em plus 1pt \@tempdima 1.5em \begingroup + \parindent \z@ \rightskip \@tocrmarg + \advance\rightskip by 0pt plus 2cm + \parfillskip -\rightskip \pretolerance=10000 + \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip + {\large\bfseries\boldmath#1}\ifx0#2\hfil\null + \else + \nobreak + \leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern + \@dotsep mu$}\hfill + \nobreak\hbox to\@pnumwidth{\hss #2}% + \fi\par + \penalty\@highpenalty \endgroup} + +\def\l@title#1#2{\addpenalty{-\@highpenalty} + \addvspace{8pt plus 1pt} + \@tempdima \z@ + \begingroup + \parindent \z@ \rightskip \@tocrmarg + \advance\rightskip by 0pt plus 2cm + \parfillskip -\rightskip \pretolerance=10000 + \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip + #1\nobreak + \leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern + \@dotsep mu$}\hfill + \nobreak\hbox to\@pnumwidth{\hss #2}\par + \penalty\@highpenalty \endgroup} + +\def\l@author#1#2{\addpenalty{\@highpenalty} + \@tempdima=15\p@ %\z@ + \begingroup + \parindent \z@ \rightskip \@tocrmarg + \advance\rightskip by 0pt plus 2cm + \pretolerance=10000 + \leavevmode \advance\leftskip\@tempdima %\hskip -\leftskip + \textit{#1}\par + \penalty\@highpenalty \endgroup} + +\setcounter{tocdepth}{0} +\newdimen\tocchpnum +\newdimen\tocsecnum +\newdimen\tocsectotal +\newdimen\tocsubsecnum +\newdimen\tocsubsectotal +\newdimen\tocsubsubsecnum +\newdimen\tocsubsubsectotal +\newdimen\tocparanum +\newdimen\tocparatotal +\newdimen\tocsubparanum +\tocchpnum=\z@ % no chapter numbers +\tocsecnum=15\p@ % section 88. plus 2.222pt +\tocsubsecnum=23\p@ % subsection 88.8 plus 2.222pt +\tocsubsubsecnum=27\p@ % subsubsection 88.8.8 plus 1.444pt +\tocparanum=35\p@ % paragraph 88.8.8.8 plus 1.666pt +\tocsubparanum=43\p@ % subparagraph 88.8.8.8.8 plus 1.888pt +\def\calctocindent{% +\tocsectotal=\tocchpnum +\advance\tocsectotal by\tocsecnum +\tocsubsectotal=\tocsectotal +\advance\tocsubsectotal by\tocsubsecnum +\tocsubsubsectotal=\tocsubsectotal +\advance\tocsubsubsectotal by\tocsubsubsecnum +\tocparatotal=\tocsubsubsectotal +\advance\tocparatotal by\tocparanum} +\calctocindent + +\def\l@section{\@dottedtocline{1}{\tocchpnum}{\tocsecnum}} +\def\l@subsection{\@dottedtocline{2}{\tocsectotal}{\tocsubsecnum}} +\def\l@subsubsection{\@dottedtocline{3}{\tocsubsectotal}{\tocsubsubsecnum}} +\def\l@paragraph{\@dottedtocline{4}{\tocsubsubsectotal}{\tocparanum}} +\def\l@subparagraph{\@dottedtocline{5}{\tocparatotal}{\tocsubparanum}} + +\def\listoffigures{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn + \fi\section*{\listfigurename\@mkboth{{\listfigurename}}{{\listfigurename}}} + \@starttoc{lof}\if@restonecol\twocolumn\fi} +\def\l@figure{\@dottedtocline{1}{0em}{1.5em}} + +\def\listoftables{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn + \fi\section*{\listtablename\@mkboth{{\listtablename}}{{\listtablename}}} + \@starttoc{lot}\if@restonecol\twocolumn\fi} +\let\l@table\l@figure + +\renewcommand\listoffigures{% + \section*{\listfigurename + \@mkboth{\listfigurename}{\listfigurename}}% + \@starttoc{lof}% + } + +\renewcommand\listoftables{% + \section*{\listtablename + \@mkboth{\listtablename}{\listtablename}}% + \@starttoc{lot}% + } + +\ifx\oribibl\undefined +\ifx\citeauthoryear\undefined +\renewenvironment{thebibliography}[1] + {\section*{\refname} + \def\@biblabel##1{##1.} + \small + \list{\@biblabel{\@arabic\c@enumiv}}% + {\settowidth\labelwidth{\@biblabel{#1}}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep + \if@openbib + \advance\leftmargin\bibindent + \itemindent -\bibindent + \listparindent \itemindent + \parsep \z@ + \fi + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{\@arabic\c@enumiv}}% + \if@openbib + \renewcommand\newblock{\par}% + \else + \renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}% + \fi + \sloppy\clubpenalty4000\widowpenalty4000% + \sfcode`\.=\@m} + {\def\@noitemerr + {\@latex@warning{Empty `thebibliography' environment}}% + \endlist} +\def\@lbibitem[#1]#2{\item[{[#1]}\hfill]\if@filesw + {\let\protect\noexpand\immediate + \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces} +\newcount\@tempcntc +\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi + \@tempcnta\z@\@tempcntb\m@ne\def\@citea{}\@cite{\@for\@citeb:=#2\do + {\@ifundefined + {b@\@citeb}{\@citeo\@tempcntb\m@ne\@citea\def\@citea{,}{\bfseries + ?}\@warning + {Citation `\@citeb' on page \thepage \space undefined}}% + {\setbox\z@\hbox{\global\@tempcntc0\csname b@\@citeb\endcsname\relax}% + \ifnum\@tempcntc=\z@ \@citeo\@tempcntb\m@ne + \@citea\def\@citea{,}\hbox{\csname b@\@citeb\endcsname}% + \else + \advance\@tempcntb\@ne + \ifnum\@tempcntb=\@tempcntc + \else\advance\@tempcntb\m@ne\@citeo + \@tempcnta\@tempcntc\@tempcntb\@tempcntc\fi\fi}}\@citeo}{#1}} +\def\@citeo{\ifnum\@tempcnta>\@tempcntb\else + \@citea\def\@citea{,\,\hskip\z@skip}% + \ifnum\@tempcnta=\@tempcntb\the\@tempcnta\else + {\advance\@tempcnta\@ne\ifnum\@tempcnta=\@tempcntb \else + \def\@citea{--}\fi + \advance\@tempcnta\m@ne\the\@tempcnta\@citea\the\@tempcntb}\fi\fi} +\else +\renewenvironment{thebibliography}[1] + {\section*{\refname} + \small + \list{}% + {\settowidth\labelwidth{}% + \leftmargin\parindent + \itemindent=-\parindent + \labelsep=\z@ + \if@openbib + \advance\leftmargin\bibindent + \itemindent -\bibindent + \listparindent \itemindent + \parsep \z@ + \fi + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{}}% + \if@openbib + \renewcommand\newblock{\par}% + \else + \renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}% + \fi + \sloppy\clubpenalty4000\widowpenalty4000% + \sfcode`\.=\@m} + {\def\@noitemerr + {\@latex@warning{Empty `thebibliography' environment}}% + \endlist} + \def\@cite#1{#1}% + \def\@lbibitem[#1]#2{\item[]\if@filesw + {\def\protect##1{\string ##1\space}\immediate + \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces} + \fi +\else +\@cons\@openbib@code{\noexpand\small} +\fi + +\def\idxquad{\hskip 10\p@}% space that divides entry from number + +\def\@idxitem{\par\hangindent 10\p@} + +\def\subitem{\par\setbox0=\hbox{--\enspace}% second order + \noindent\hangindent\wd0\box0}% index entry + +\def\subsubitem{\par\setbox0=\hbox{--\,--\enspace}% third + \noindent\hangindent\wd0\box0}% order index entry + +\def\indexspace{\par \vskip 10\p@ plus5\p@ minus3\p@\relax} + +\renewenvironment{theindex} + {\@mkboth{\indexname}{\indexname}% + \thispagestyle{empty}\parindent\z@ + \parskip\z@ \@plus .3\p@\relax + \let\item\par + \def\,{\relax\ifmmode\mskip\thinmuskip + \else\hskip0.2em\ignorespaces\fi}% + \normalfont\small + \begin{multicols}{2}[\@makeschapterhead{\indexname}]% + } + {\end{multicols}} + +\renewcommand\footnoterule{% + \kern-3\p@ + \hrule\@width 2truecm + \kern2.6\p@} + \newdimen\fnindent + \fnindent1em +\long\def\@makefntext#1{% + \parindent \fnindent% + \leftskip \fnindent% + \noindent + \llap{\hb@xt@1em{\hss\@makefnmark\ }}\ignorespaces#1} + +\long\def\@makecaption#1#2{% + \small + \vskip\abovecaptionskip + \sbox\@tempboxa{{\bfseries #1.} #2}% + \ifdim \wd\@tempboxa >\hsize + {\bfseries #1.} #2\par + \else + \global \@minipagefalse + \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \vskip\belowcaptionskip} + +\def\fps@figure{htbp} +\def\fnum@figure{\figurename\thinspace\thefigure} +\def \@floatboxreset {% + \reset@font + \small + \@setnobreak + \@setminipage +} +\def\fps@table{htbp} +\def\fnum@table{\tablename~\thetable} +\renewenvironment{table} + {\setlength\abovecaptionskip{0\p@}% + \setlength\belowcaptionskip{10\p@}% + \@float{table}} + {\end@float} +\renewenvironment{table*} + {\setlength\abovecaptionskip{0\p@}% + \setlength\belowcaptionskip{10\p@}% + \@dblfloat{table}} + {\end@dblfloat} + +\long\def\@caption#1[#2]#3{\par\addcontentsline{\csname + ext@#1\endcsname}{#1}{\protect\numberline{\csname + the#1\endcsname}{\ignorespaces #2}}\begingroup + \@parboxrestore + \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par + \endgroup} + +% LaTeX does not provide a command to enter the authors institute +% addresses. The \institute command is defined here. + +\newcounter{@inst} +\newcounter{@auth} +\newcounter{auco} +\newdimen\instindent +\newbox\authrun +\newtoks\authorrunning +\newtoks\tocauthor +\newbox\titrun +\newtoks\titlerunning +\newtoks\toctitle + +\def\clearheadinfo{\gdef\@author{No Author Given}% + \gdef\@title{No Title Given}% + \gdef\@subtitle{}% + \gdef\@institute{No Institute Given}% + \gdef\@thanks{}% + \global\titlerunning={}\global\authorrunning={}% + \global\toctitle={}\global\tocauthor={}} + +\def\institute#1{\gdef\@institute{#1}} + +\def\institutename{\par + \begingroup + \parskip=\z@ + \parindent=\z@ + \setcounter{@inst}{1}% + \def\and{\par\stepcounter{@inst}% + \noindent$^{\the@inst}$\enspace\ignorespaces}% + \setbox0=\vbox{\def\thanks##1{}\@institute}% + \ifnum\c@@inst=1\relax + \gdef\fnnstart{0}% + \else + \xdef\fnnstart{\c@@inst}% + \setcounter{@inst}{1}% + \noindent$^{\the@inst}$\enspace + \fi + \ignorespaces + \@institute\par + \endgroup} + +\def\@fnsymbol#1{\ensuremath{\ifcase#1\or\star\or{\star\star}\or + {\star\star\star}\or \dagger\or \ddagger\or + \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger + \or \ddagger\ddagger \else\@ctrerr\fi}} + +\def\inst#1{\unskip$^{#1}$} +\def\fnmsep{\unskip$^,$} +\def\email#1{{\tt#1}} +\AtBeginDocument{\@ifundefined{url}{\def\url#1{#1}}{}% +\@ifpackageloaded{babel}{% +\@ifundefined{extrasenglish}{}{\addto\extrasenglish{\switcht@albion}}% +\@ifundefined{extrasfrenchb}{}{\addto\extrasfrenchb{\switcht@francais}}% +\@ifundefined{extrasgerman}{}{\addto\extrasgerman{\switcht@deutsch}}% +}{\switcht@@therlang}% +\providecommand{\keywords}[1]{\par\addvspace\baselineskip +\noindent\keywordname\enspace\ignorespaces#1}% +} +\def\homedir{\~{ }} + +\def\subtitle#1{\gdef\@subtitle{#1}} +\clearheadinfo +% +%%% to avoid hyperref warnings +\providecommand*{\toclevel@author}{999} +%%% to make title-entry parent of section-entries +\providecommand*{\toclevel@title}{0} +% +\renewcommand\maketitle{\newpage +\phantomsection + \refstepcounter{chapter}% + \stepcounter{section}% + \setcounter{section}{0}% + \setcounter{subsection}{0}% + \setcounter{figure}{0} + \setcounter{table}{0} + \setcounter{equation}{0} + \setcounter{footnote}{0}% + \begingroup + \parindent=\z@ + \renewcommand\thefootnote{\@fnsymbol\c@footnote}% + \if@twocolumn + \ifnum \col@number=\@ne + \@maketitle + \else + \twocolumn[\@maketitle]% + \fi + \else + \newpage + \global\@topnum\z@ % Prevents figures from going at top of page. + \@maketitle + \fi + \thispagestyle{empty}\@thanks +% + \def\\{\unskip\ \ignorespaces}\def\inst##1{\unskip{}}% + \def\thanks##1{\unskip{}}\def\fnmsep{\unskip}% + \instindent=\hsize + \advance\instindent by-\headlineindent + \if!\the\toctitle!\addcontentsline{toc}{title}{\@title}\else + \addcontentsline{toc}{title}{\the\toctitle}\fi + \if@runhead + \if!\the\titlerunning!\else + \edef\@title{\the\titlerunning}% + \fi + \global\setbox\titrun=\hbox{\small\rm\unboldmath\ignorespaces\@title}% + \ifdim\wd\titrun>\instindent + \typeout{Title too long for running head. Please supply}% + \typeout{a shorter form with \string\titlerunning\space prior to + \string\maketitle}% + \global\setbox\titrun=\hbox{\small\rm + Title Suppressed Due to Excessive Length}% + \fi + \xdef\@title{\copy\titrun}% + \fi +% + \if!\the\tocauthor!\relax + {\def\and{\noexpand\protect\noexpand\and}% + \protected@xdef\toc@uthor{\@author}}% + \else + \def\\{\noexpand\protect\noexpand\newline}% + \protected@xdef\scratch{\the\tocauthor}% + \protected@xdef\toc@uthor{\scratch}% + \fi + \addtocontents{toc}{\noexpand\protect\noexpand\authcount{\the\c@auco}}% + \addcontentsline{toc}{author}{\toc@uthor}% + \if@runhead + \if!\the\authorrunning! + \value{@inst}=\value{@auth}% + \setcounter{@auth}{1}% + \else + \edef\@author{\the\authorrunning}% + \fi + \global\setbox\authrun=\hbox{\small\unboldmath\@author\unskip}% + \ifdim\wd\authrun>\instindent + \typeout{Names of authors too long for running head. Please supply}% + \typeout{a shorter form with \string\authorrunning\space prior to + \string\maketitle}% + \global\setbox\authrun=\hbox{\small\rm + Authors Suppressed Due to Excessive Length}% + \fi + \xdef\@author{\copy\authrun}% + \markboth{\@author}{\@title}% + \fi + \endgroup + \setcounter{footnote}{\fnnstart}% + \clearheadinfo} +% +\def\@maketitle{\newpage + \markboth{}{}% + \def\lastand{\ifnum\value{@inst}=2\relax + \unskip{} \andname\ + \else + \unskip \lastandname\ + \fi}% + \def\and{\stepcounter{@auth}\relax + \ifnum\value{@auth}=\value{@inst}% + \lastand + \else + \unskip, + \fi}% + \begin{center}% + \let\newline\\ + {\Large \bfseries\boldmath + \pretolerance=10000 + \@title \par}\vskip .8cm +\if!\@subtitle!\else {\large \bfseries\boldmath + \vskip -.65cm + \pretolerance=10000 + \@subtitle \par}\vskip .8cm\fi + \setbox0=\vbox{\setcounter{@auth}{1}\def\and{\stepcounter{@auth}}% + \def\thanks##1{}\@author}% + \global\value{@inst}=\value{@auth}% + \global\value{auco}=\value{@auth}% + \setcounter{@auth}{1}% +{\lineskip .5em +\noindent\ignorespaces +\@author\vskip.35cm} + {\small\institutename} + \end{center}% + } + +% definition of the "\spnewtheorem" command. +% +% Usage: +% +% \spnewtheorem{env_nam}{caption}[within]{cap_font}{body_font} +% or \spnewtheorem{env_nam}[numbered_like]{caption}{cap_font}{body_font} +% or \spnewtheorem*{env_nam}{caption}{cap_font}{body_font} +% +% New is "cap_font" and "body_font". It stands for +% fontdefinition of the caption and the text itself. +% +% "\spnewtheorem*" gives a theorem without number. +% +% A defined spnewthoerem environment is used as described +% by Lamport. +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def\@thmcountersep{} +\def\@thmcounterend{.} + +\def\spnewtheorem{\@ifstar{\@sthm}{\@Sthm}} + +% definition of \spnewtheorem with number + +\def\@spnthm#1#2{% + \@ifnextchar[{\@spxnthm{#1}{#2}}{\@spynthm{#1}{#2}}} +\def\@Sthm#1{\@ifnextchar[{\@spothm{#1}}{\@spnthm{#1}}} + +\def\@spxnthm#1#2[#3]#4#5{\expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}\@addtoreset{#1}{#3}% + \expandafter\xdef\csname the#1\endcsname{\expandafter\noexpand + \csname the#3\endcsname \noexpand\@thmcountersep \@thmcounter{#1}}% + \expandafter\xdef\csname #1name\endcsname{#2}% + \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#4}{#5}}% + \global\@namedef{end#1}{\@endtheorem}}} + +\def\@spynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}% + \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}% + \expandafter\xdef\csname #1name\endcsname{#2}% + \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#3}{#4}}% + \global\@namedef{end#1}{\@endtheorem}}} + +\def\@spothm#1[#2]#3#4#5{% + \@ifundefined{c@#2}{\@latexerr{No theorem environment `#2' defined}\@eha}% + {\expandafter\@ifdefinable\csname #1\endcsname + {\newaliascnt{#1}{#2}% + \expandafter\xdef\csname #1name\endcsname{#3}% + \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#4}{#5}}% + \global\@namedef{end#1}{\@endtheorem}}}} + +\def\@spthm#1#2#3#4{\topsep 7\p@ \@plus2\p@ \@minus4\p@ +\refstepcounter{#1}% +\@ifnextchar[{\@spythm{#1}{#2}{#3}{#4}}{\@spxthm{#1}{#2}{#3}{#4}}} + +\def\@spxthm#1#2#3#4{\@spbegintheorem{#2}{\csname the#1\endcsname}{#3}{#4}% + \ignorespaces} + +\def\@spythm#1#2#3#4[#5]{\@spopargbegintheorem{#2}{\csname + the#1\endcsname}{#5}{#3}{#4}\ignorespaces} + +\def\@spbegintheorem#1#2#3#4{\trivlist + \item[\hskip\labelsep{#3#1\ #2\@thmcounterend}]#4} + +\def\@spopargbegintheorem#1#2#3#4#5{\trivlist + \item[\hskip\labelsep{#4#1\ #2}]{#4(#3)\@thmcounterend\ }#5} + +% definition of \spnewtheorem* without number + +\def\@sthm#1#2{\@Ynthm{#1}{#2}} + +\def\@Ynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname + {\global\@namedef{#1}{\@Thm{\csname #1name\endcsname}{#3}{#4}}% + \expandafter\xdef\csname #1name\endcsname{#2}% + \global\@namedef{end#1}{\@endtheorem}}} + +\def\@Thm#1#2#3{\topsep 7\p@ \@plus2\p@ \@minus4\p@ +\@ifnextchar[{\@Ythm{#1}{#2}{#3}}{\@Xthm{#1}{#2}{#3}}} + +\def\@Xthm#1#2#3{\@Begintheorem{#1}{#2}{#3}\ignorespaces} + +\def\@Ythm#1#2#3[#4]{\@Opargbegintheorem{#1} + {#4}{#2}{#3}\ignorespaces} + +\def\@Begintheorem#1#2#3{#3\trivlist + \item[\hskip\labelsep{#2#1\@thmcounterend}]} + +\def\@Opargbegintheorem#1#2#3#4{#4\trivlist + \item[\hskip\labelsep{#3#1}]{#3(#2)\@thmcounterend\ }} + +\if@envcntsect + \def\@thmcountersep{.} + \spnewtheorem{theorem}{Theorem}[section]{\bfseries}{\itshape} +\else + \spnewtheorem{theorem}{Theorem}{\bfseries}{\itshape} + \if@envcntreset + \@addtoreset{theorem}{section} + \else + \@addtoreset{theorem}{chapter} + \fi +\fi + +%definition of divers theorem environments +\spnewtheorem*{claim}{Claim}{\itshape}{\rmfamily} +\spnewtheorem*{proof}{Proof}{\itshape}{\rmfamily} +\if@envcntsame % alle Umgebungen wie Theorem. + \def\spn@wtheorem#1#2#3#4{\@spothm{#1}[theorem]{#2}{#3}{#4}} +\else % alle Umgebungen mit eigenem Zaehler + \if@envcntsect % mit section numeriert + \def\spn@wtheorem#1#2#3#4{\@spxnthm{#1}{#2}[section]{#3}{#4}} + \else % nicht mit section numeriert + \if@envcntreset + \def\spn@wtheorem#1#2#3#4{\@spynthm{#1}{#2}{#3}{#4} + \@addtoreset{#1}{section}} + \else + \def\spn@wtheorem#1#2#3#4{\@spynthm{#1}{#2}{#3}{#4} + \@addtoreset{#1}{chapter}}% + \fi + \fi +\fi +\spn@wtheorem{case}{Case}{\itshape}{\rmfamily} +\spn@wtheorem{conjecture}{Conjecture}{\itshape}{\rmfamily} +\spn@wtheorem{corollary}{Corollary}{\bfseries}{\itshape} +\spn@wtheorem{definition}{Definition}{\bfseries}{\itshape} +\spn@wtheorem{example}{Example}{\itshape}{\rmfamily} +\spn@wtheorem{exercise}{Exercise}{\itshape}{\rmfamily} +\spn@wtheorem{lemma}{Lemma}{\bfseries}{\itshape} +\spn@wtheorem{note}{Note}{\itshape}{\rmfamily} +\spn@wtheorem{problem}{Problem}{\itshape}{\rmfamily} +\spn@wtheorem{property}{Property}{\itshape}{\rmfamily} +\spn@wtheorem{proposition}{Proposition}{\bfseries}{\itshape} +\spn@wtheorem{question}{Question}{\itshape}{\rmfamily} +\spn@wtheorem{solution}{Solution}{\itshape}{\rmfamily} +\spn@wtheorem{remark}{Remark}{\itshape}{\rmfamily} + +\def\@takefromreset#1#2{% + \def\@tempa{#1}% + \let\@tempd\@elt + \def\@elt##1{% + \def\@tempb{##1}% + \ifx\@tempa\@tempb\else + \@addtoreset{##1}{#2}% + \fi}% + \expandafter\expandafter\let\expandafter\@tempc\csname cl@#2\endcsname + \expandafter\def\csname cl@#2\endcsname{}% + \@tempc + \let\@elt\@tempd} + +\def\theopargself{\def\@spopargbegintheorem##1##2##3##4##5{\trivlist + \item[\hskip\labelsep{##4##1\ ##2}]{##4##3\@thmcounterend\ }##5} + \def\@Opargbegintheorem##1##2##3##4{##4\trivlist + \item[\hskip\labelsep{##3##1}]{##3##2\@thmcounterend\ }} + } + +\renewenvironment{abstract}{% + \list{}{\advance\topsep by0.35cm\relax\small + \leftmargin=1cm + \labelwidth=\z@ + \listparindent=\z@ + \itemindent\listparindent + \rightmargin\leftmargin}\item[\hskip\labelsep + \bfseries\abstractname]} + {\endlist} + +\newdimen\headlineindent % dimension for space between +\headlineindent=1.166cm % number and text of headings. + +\def\ps@headings{\let\@mkboth\@gobbletwo + \let\@oddfoot\@empty\let\@evenfoot\@empty + \def\@evenhead{\normalfont\small\rlap{\thepage}\hspace{\headlineindent}% + \leftmark\hfil} + \def\@oddhead{\normalfont\small\hfil\rightmark\hspace{\headlineindent}% + \llap{\thepage}} + \def\chaptermark##1{}% + \def\sectionmark##1{}% + \def\subsectionmark##1{}} + +\def\ps@titlepage{\let\@mkboth\@gobbletwo + \let\@oddfoot\@empty\let\@evenfoot\@empty + \def\@evenhead{\normalfont\small\rlap{\thepage}\hspace{\headlineindent}% + \hfil} + \def\@oddhead{\normalfont\small\hfil\hspace{\headlineindent}% + \llap{\thepage}} + \def\chaptermark##1{}% + \def\sectionmark##1{}% + \def\subsectionmark##1{}} + +\if@runhead\ps@headings\else +\ps@empty\fi + +\setlength\arraycolsep{1.4\p@} +\setlength\tabcolsep{1.4\p@} + +\endinput +%end of file llncs.cls diff --git "a/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/Ukrainian paper/casus.sty" "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/Ukrainian paper/casus.sty" new file mode 100644 index 0000000..0b2fcf6 --- /dev/null +++ "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/Ukrainian paper/casus.sty" @@ -0,0 +1,193 @@ +%% +%% This is file `casus.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% vakthesis.dtx (with options: `casus') +%% +%% IMPORTANT NOTICE: +%% +%% For the copyright see the source file. +%% +%% Any modified versions of this file must be renamed +%% with new filenames distinct from casus.sty. +%% +%% For distribution of the original source see the terms +%% for copying and modification in the file vakthesis.dtx. +%% +%% This generated file may be distributed as long as the +%% original source files, as listed above, are part of the +%% same distribution. (The sources need not necessarily be +%% in the same archive or directory.) +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesPackage{casus} + [2004/02/20 v0.01 Casus (OMB)] +%% +\def\declinenoun{} +\def\declineadjective{} +\newcommand{\declension}[1]{% + \def\@partofspeech{noun}% + \@split@declension#1.} +\def\@split@declension#1. {% + \ifx\relax#1\relax + \else + \@split@entry#1. + \expandafter\@split@declension + \fi} +\def\@split@entry{\@ifnextchar[\@extract@partofspeech + {\expandafter\csname @split@entry@\@partofspeech\endcsname}} +\def\@extract@partofspeech[#1] {\def\@partofspeech{#1}% + \expandafter\csname @split@entry@\@partofspeech\endcsname} +\def\@split@entry@noun#1 #2 #3 #4 #5 #6 #7. {% + \g@addto@macro\declinenoun{\entry{#1}{#2}{#3}{#4}{#5}{#6}{#7}}} +\def\@split@entry@adjective#1 #2 #3 #4 #5 #6. {% + \g@addto@macro\declineadjective{\entry{#1}{#2}{#3}{#4}{#5}{#6}}} +%% +\declension{% ' % +[noun] +- . +- . +- 쳿 쳿 쳺 쳿 쳺. +- . +- . +- . +- . +- . +-' ' ' ' ' ' '. +%% I +%% +- . +- . +- . +- . +%% ' +- . +- . +%% +- . +- . +- . +- . +[adjective] +- . +- . +- . +- . +- . +- . +} +\newif\if@unknownword +%% ³ #2 #3 +%% ukr rus eng +%% N 0 nominative +%% G 1 genitive +%% D 2 dative +%% A 3 accusative +%% I 4 instrumental +%% L 5 locative +%% ablative(- Latin) +%% prepositional +%% V 6 vocative +\newcommand{\case}[3][noun]{% + \def\@partofspeech{#1}% + \def\@temp{adjective}% +%% (, , , ...) + \def\@numbercase{\if N#20\else\if G#21\else\if D#22\else + \if A#23\else\if I#24\else\if L#25\else\if V#26\else + 7\fi\fi\fi\fi\fi\fi\fi}% + \def\@worda{}% + \ifnum\@numbercase>6 + \def\@worda{#3}\typeout{Unknown caseID: `#2'.}% + \else + \ifx\@partofspeech\@temp + \ifnum\@numbercase=6 + \def\@worda{#3}% + \typeout{Adjective does not have vocative case.}% + \else + \@declineword{#3}\@nil + \fi + \else + \@declineword{#3}\@nil + \fi + \fi + \@worda} +\def\@declineword#1\@nil{% + \ifx\relax#1\relax + \else + \@unknownwordfalse + \def\entry{\expandafter + \csname @case@\@partofspeech\endcsname + {\@numbercase}{\ifx\@worda\@empty\else-\fi#1}}% + \def\lastentry{\@unknownwordtrue}% + \expandafter\csname decline\@partofspeech\endcsname\lastentry + \if@unknownword + \@shift#1\@nil + \else + \g@addto@macro\@worda{\@wordb}% + \fi + \fi} +\def\@shift#1{\g@addto@macro\@worda{#1}\@declineword} +\def\@case@noun#1#2#3#4#5#6#7#8#9{% + \edef\@tempa{#2}\edef\@tempb{#3}% + \ifx\@tempa\@tempb + \def\@wordb{\ifcase#1 \@ifnextchar-\@gobble\relax#3\or + #4\or#5\or#6\or#7\or#8\or#9\fi}% + \expandafter\@gobbleallentries + \fi} +\def\@case@adjective#1#2#3#4#5#6#7#8{% + \edef\@tempa{#2}\edef\@tempb{#3}% + \ifx\@tempa\@tempb + \def\@wordb{\ifcase#1 \@ifnextchar-\@gobble\relax#3\or + #4\or#5\or#6\or#7\or#8\fi}% + \expandafter\@gobbleallentries + \fi} +\def\@gobbleallentries#1\lastentry{} +%% +\newcommand{\paradigm}[2][noun]{% +\begin{list}{}{\itemsep0pt\parsep0pt\def\makelabel##1{##1\hfil}} +\item[.] \case[#1]{N}{#2} +\item[.] \case[#1]{G}{#2} +\item[.] \case[#1]{D}{#2} +\item[.] \case[#1]{A}{#2} +\item[.] \case[#1]{I}{#2} +\item[.] \case[#1]{L}{#2} +\ifthenelse{\equal{#1}{noun}}{\item[.] \case[#1]{V}{#2}}{} +\end{list}} +%% #2 #1 +\newcommand{\transformsentence}[2]{% + \def\@case{#1}% + \def\@processword##1{\case[adjective]{\@case}{##1} }% + \expandafter\@split@sentence#2 } +\def\@split@sentence#1 {% + \ifx\relax#1\relax + \unskip + \else + \ifthenelse{\equal{#1}{}\or\equal{#1}{}\or + \equal{#1}{}\or\equal{#1}{}\or + \equal{#1}{}\or\equal{#1}{}\or + \equal{#1}{}\or\equal{#1}{}\or + \equal{#1}{}\or\equal{#1}{}\or + \equal{#1}{}\or\equal{#1}{̳}\or + \equal{#1}{}\or\equal{#1}{}\or + \equal{#1}{}\or\equal{#1}{}\or + \equal{#1}{'}\or\equal{#1}{'}} + {\case[noun]{\@case}{#1} + \def\@processword##1{##1 }} + {\@processword{#1}}% + \expandafter\@split@sentence + \fi} +%% #1 +\newcommand{\fullset}[1]{% +\begin{list}{}{\itemsep0pt\parsep0pt\def\makelabel##1{##1\hfil}} +\item[.] #1 +\item[.] \transformsentence{G}{#1} +\item[.] \transformsentence{D}{#1} +\item[.] \transformsentence{A}{#1} +\item[.] \transformsentence{I}{#1} +\item[.] \transformsentence{L}{#1} +\item[.]\transformsentence{V}{#1} +\end{list}} +\endinput +%% +%% End of file `casus.sty'. diff --git "a/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/Ukrainian paper/llncs.cls" "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/Ukrainian paper/llncs.cls" new file mode 100644 index 0000000..93c802e --- /dev/null +++ "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/Ukrainian paper/llncs.cls" @@ -0,0 +1,1207 @@ +% LLNCS DOCUMENT CLASS -- version 2.17 (12-Jul-2010) +% Springer Verlag LaTeX2e support for Lecture Notes in Computer Science +% +%% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +%% +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesClass{llncs}[2010/07/12 v2.17 +^^J LaTeX document class for Lecture Notes in Computer Science] +% Options +\let\if@envcntreset\iffalse +\DeclareOption{envcountreset}{\let\if@envcntreset\iftrue} +\DeclareOption{citeauthoryear}{\let\citeauthoryear=Y} +\DeclareOption{oribibl}{\let\oribibl=Y} +\let\if@custvec\iftrue +\DeclareOption{orivec}{\let\if@custvec\iffalse} +\let\if@envcntsame\iffalse +\DeclareOption{envcountsame}{\let\if@envcntsame\iftrue} +\let\if@envcntsect\iffalse +\DeclareOption{envcountsect}{\let\if@envcntsect\iftrue} +\let\if@runhead\iffalse +\DeclareOption{runningheads}{\let\if@runhead\iftrue} + +\let\if@openright\iftrue +\let\if@openbib\iffalse +\DeclareOption{openbib}{\let\if@openbib\iftrue} + +% languages +\let\switcht@@therlang\relax +\def\ds@deutsch{\def\switcht@@therlang{\switcht@deutsch}} +\def\ds@francais{\def\switcht@@therlang{\switcht@francais}} + +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} + +\ProcessOptions + +\LoadClass[twoside]{article} +\RequirePackage{multicol} % needed for the list of participants, index +\RequirePackage{aliascnt} + +\setlength{\textwidth}{12.2cm} +\setlength{\textheight}{19.3cm} +\renewcommand\@pnumwidth{2em} +\renewcommand\@tocrmarg{3.5em} +% +\def\@dottedtocline#1#2#3#4#5{% + \ifnum #1>\c@tocdepth \else + \vskip \z@ \@plus.2\p@ + {\leftskip #2\relax \rightskip \@tocrmarg \advance\rightskip by 0pt plus 2cm + \parfillskip -\rightskip \pretolerance=10000 + \parindent #2\relax\@afterindenttrue + \interlinepenalty\@M + \leavevmode + \@tempdima #3\relax + \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip + {#4}\nobreak + \leaders\hbox{$\m@th + \mkern \@dotsep mu\hbox{.}\mkern \@dotsep + mu$}\hfill + \nobreak + \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}% + \par}% + \fi} +% +\def\switcht@albion{% +\def\abstractname{Abstract.} +\def\ackname{Acknowledgement.} +\def\andname{and} +\def\lastandname{\unskip, and} +\def\appendixname{Appendix} +\def\chaptername{Chapter} +\def\claimname{Claim} +\def\conjecturename{Conjecture} +\def\contentsname{Table of Contents} +\def\corollaryname{Corollary} +\def\definitionname{Definition} +\def\examplename{Example} +\def\exercisename{Exercise} +\def\figurename{Fig.} +\def\keywordname{{\bf Keywords:}} +\def\indexname{Index} +\def\lemmaname{Lemma} +\def\contriblistname{List of Contributors} +\def\listfigurename{List of Figures} +\def\listtablename{List of Tables} +\def\mailname{{\it Correspondence to\/}:} +\def\noteaddname{Note added in proof} +\def\notename{Note} +\def\partname{Part} +\def\problemname{Problem} +\def\proofname{Proof} +\def\propertyname{Property} +\def\propositionname{Proposition} +\def\questionname{Question} +\def\remarkname{Remark} +\def\seename{see} +\def\solutionname{Solution} +\def\subclassname{{\it Subject Classifications\/}:} +\def\tablename{Table} +\def\theoremname{Theorem}} +\switcht@albion +% Names of theorem like environments are already defined +% but must be translated if another language is chosen +% +% French section +\def\switcht@francais{%\typeout{On parle francais.}% + \def\abstractname{R\'esum\'e.}% + \def\ackname{Remerciements.}% + \def\andname{et}% + \def\lastandname{ et}% + \def\appendixname{Appendice} + \def\chaptername{Chapitre}% + \def\claimname{Pr\'etention}% + \def\conjecturename{Hypoth\`ese}% + \def\contentsname{Table des mati\`eres}% + \def\corollaryname{Corollaire}% + \def\definitionname{D\'efinition}% + \def\examplename{Exemple}% + \def\exercisename{Exercice}% + \def\figurename{Fig.}% + \def\keywordname{{\bf Mots-cl\'e:}} + \def\indexname{Index} + \def\lemmaname{Lemme}% + \def\contriblistname{Liste des contributeurs} + \def\listfigurename{Liste des figures}% + \def\listtablename{Liste des tables}% + \def\mailname{{\it Correspondence to\/}:} + \def\noteaddname{Note ajout\'ee \`a l'\'epreuve}% + \def\notename{Remarque}% + \def\partname{Partie}% + \def\problemname{Probl\`eme}% + \def\proofname{Preuve}% + \def\propertyname{Caract\'eristique}% +%\def\propositionname{Proposition}% + \def\questionname{Question}% + \def\remarkname{Remarque}% + \def\seename{voir} + \def\solutionname{Solution}% + \def\subclassname{{\it Subject Classifications\/}:} + \def\tablename{Tableau}% + \def\theoremname{Th\'eor\`eme}% +} +% +% German section +\def\switcht@deutsch{%\typeout{Man spricht deutsch.}% + \def\abstractname{Zusammenfassung.}% + \def\ackname{Danksagung.}% + \def\andname{und}% + \def\lastandname{ und}% + \def\appendixname{Anhang}% + \def\chaptername{Kapitel}% + \def\claimname{Behauptung}% + \def\conjecturename{Hypothese}% + \def\contentsname{Inhaltsverzeichnis}% + \def\corollaryname{Korollar}% +%\def\definitionname{Definition}% + \def\examplename{Beispiel}% + \def\exercisename{\"Ubung}% + \def\figurename{Abb.}% + \def\keywordname{{\bf Schl\"usselw\"orter:}} + \def\indexname{Index} +%\def\lemmaname{Lemma}% + \def\contriblistname{Mitarbeiter} + \def\listfigurename{Abbildungsverzeichnis}% + \def\listtablename{Tabellenverzeichnis}% + \def\mailname{{\it Correspondence to\/}:} + \def\noteaddname{Nachtrag}% + \def\notename{Anmerkung}% + \def\partname{Teil}% +%\def\problemname{Problem}% + \def\proofname{Beweis}% + \def\propertyname{Eigenschaft}% +%\def\propositionname{Proposition}% + \def\questionname{Frage}% + \def\remarkname{Anmerkung}% + \def\seename{siehe} + \def\solutionname{L\"osung}% + \def\subclassname{{\it Subject Classifications\/}:} + \def\tablename{Tabelle}% +%\def\theoremname{Theorem}% +} + +% Ragged bottom for the actual page +\def\thisbottomragged{\def\@textbottom{\vskip\z@ plus.0001fil +\global\let\@textbottom\relax}} + +\renewcommand\small{% + \@setfontsize\small\@ixpt{11}% + \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@ + \abovedisplayshortskip \z@ \@plus2\p@ + \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@ + \def\@listi{\leftmargin\leftmargini + \parsep 0\p@ \@plus1\p@ \@minus\p@ + \topsep 8\p@ \@plus2\p@ \@minus4\p@ + \itemsep0\p@}% + \belowdisplayskip \abovedisplayskip +} + +\frenchspacing +\widowpenalty=10000 +\clubpenalty=10000 + +\setlength\oddsidemargin {63\p@} +\setlength\evensidemargin {63\p@} +\setlength\marginparwidth {90\p@} + +\setlength\headsep {16\p@} + +\setlength\footnotesep{7.7\p@} +\setlength\textfloatsep{8mm\@plus 2\p@ \@minus 4\p@} +\setlength\intextsep {8mm\@plus 2\p@ \@minus 2\p@} + +\setcounter{secnumdepth}{2} + +\newcounter {chapter} +\renewcommand\thechapter {\@arabic\c@chapter} + +\newif\if@mainmatter \@mainmattertrue +\newcommand\frontmatter{\cleardoublepage + \@mainmatterfalse\pagenumbering{Roman}} +\newcommand\mainmatter{\cleardoublepage + \@mainmattertrue\pagenumbering{arabic}} +\newcommand\backmatter{\if@openright\cleardoublepage\else\clearpage\fi + \@mainmatterfalse} + +\renewcommand\part{\cleardoublepage + \thispagestyle{empty}% + \if@twocolumn + \onecolumn + \@tempswatrue + \else + \@tempswafalse + \fi + \null\vfil + \secdef\@part\@spart} + +\def\@part[#1]#2{% + \ifnum \c@secnumdepth >-2\relax + \refstepcounter{part}% + \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}% + \else + \addcontentsline{toc}{part}{#1}% + \fi + \markboth{}{}% + {\centering + \interlinepenalty \@M + \normalfont + \ifnum \c@secnumdepth >-2\relax + \huge\bfseries \partname~\thepart + \par + \vskip 20\p@ + \fi + \Huge \bfseries #2\par}% + \@endpart} +\def\@spart#1{% + {\centering + \interlinepenalty \@M + \normalfont + \Huge \bfseries #1\par}% + \@endpart} +\def\@endpart{\vfil\newpage + \if@twoside + \null + \thispagestyle{empty}% + \newpage + \fi + \if@tempswa + \twocolumn + \fi} + +\newcommand\chapter{\clearpage + \thispagestyle{empty}% + \global\@topnum\z@ + \@afterindentfalse + \secdef\@chapter\@schapter} +\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}% + {\protect\numberline{\thechapter}#1}% + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \chaptermark{#1}% + \addtocontents{lof}{\protect\addvspace{10\p@}}% + \addtocontents{lot}{\protect\addvspace{10\p@}}% + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterheading + \fi} +\def\@makechapterhead#1{% +% \vspace*{50\p@}% + {\centering + \ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \large\bfseries \@chapapp{} \thechapter + \par\nobreak + \vskip 20\p@ + \fi + \fi + \interlinepenalty\@M + \Large \bfseries #1\par\nobreak + \vskip 40\p@ + }} +\def\@schapter#1{\if@twocolumn + \@topnewpage[\@makeschapterhead{#1}]% + \else + \@makeschapterhead{#1}% + \@afterheading + \fi} +\def\@makeschapterhead#1{% +% \vspace*{50\p@}% + {\centering + \normalfont + \interlinepenalty\@M + \Large \bfseries #1\par\nobreak + \vskip 40\p@ + }} + +\renewcommand\section{\@startsection{section}{1}{\z@}% + {-18\p@ \@plus -4\p@ \@minus -4\p@}% + {12\p@ \@plus 4\p@ \@minus 4\p@}% + {\normalfont\large\bfseries\boldmath + \rightskip=\z@ \@plus 8em\pretolerance=10000 }} +\renewcommand\subsection{\@startsection{subsection}{2}{\z@}% + {-18\p@ \@plus -4\p@ \@minus -4\p@}% + {8\p@ \@plus 4\p@ \@minus 4\p@}% + {\normalfont\normalsize\bfseries\boldmath + \rightskip=\z@ \@plus 8em\pretolerance=10000 }} +\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% + {-18\p@ \@plus -4\p@ \@minus -4\p@}% + {-0.5em \@plus -0.22em \@minus -0.1em}% + {\normalfont\normalsize\bfseries\boldmath}} +\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}% + {-12\p@ \@plus -4\p@ \@minus -4\p@}% + {-0.5em \@plus -0.22em \@minus -0.1em}% + {\normalfont\normalsize\itshape}} +\renewcommand\subparagraph[1]{\typeout{LLNCS warning: You should not use + \string\subparagraph\space with this class}\vskip0.5cm +You should not use \verb|\subparagraph| with this class.\vskip0.5cm} + +\DeclareMathSymbol{\Gamma}{\mathalpha}{letters}{"00} +\DeclareMathSymbol{\Delta}{\mathalpha}{letters}{"01} +\DeclareMathSymbol{\Theta}{\mathalpha}{letters}{"02} +\DeclareMathSymbol{\Lambda}{\mathalpha}{letters}{"03} +\DeclareMathSymbol{\Xi}{\mathalpha}{letters}{"04} +\DeclareMathSymbol{\Pi}{\mathalpha}{letters}{"05} +\DeclareMathSymbol{\Sigma}{\mathalpha}{letters}{"06} +\DeclareMathSymbol{\Upsilon}{\mathalpha}{letters}{"07} +\DeclareMathSymbol{\Phi}{\mathalpha}{letters}{"08} +\DeclareMathSymbol{\Psi}{\mathalpha}{letters}{"09} +\DeclareMathSymbol{\Omega}{\mathalpha}{letters}{"0A} + +\let\footnotesize\small + +\if@custvec +\def\vec#1{\mathchoice{\mbox{\boldmath$\displaystyle#1$}} +{\mbox{\boldmath$\textstyle#1$}} +{\mbox{\boldmath$\scriptstyle#1$}} +{\mbox{\boldmath$\scriptscriptstyle#1$}}} +\fi + +\def\squareforqed{\hbox{\rlap{$\sqcap$}$\sqcup$}} +\def\qed{\ifmmode\squareforqed\else{\unskip\nobreak\hfil +\penalty50\hskip1em\null\nobreak\hfil\squareforqed +\parfillskip=0pt\finalhyphendemerits=0\endgraf}\fi} + +\def\getsto{\mathrel{\mathchoice {\vcenter{\offinterlineskip +\halign{\hfil +$\displaystyle##$\hfil\cr\gets\cr\to\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\gets +\cr\to\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr\gets +\cr\to\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr +\gets\cr\to\cr}}}}} +\def\lid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil +$\displaystyle##$\hfil\cr<\cr\noalign{\vskip1.2pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr<\cr +\noalign{\vskip1.2pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr<\cr +\noalign{\vskip1pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr +<\cr +\noalign{\vskip0.9pt}=\cr}}}}} +\def\gid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil +$\displaystyle##$\hfil\cr>\cr\noalign{\vskip1.2pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr>\cr +\noalign{\vskip1.2pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr>\cr +\noalign{\vskip1pt}=\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr +>\cr +\noalign{\vskip0.9pt}=\cr}}}}} +\def\grole{\mathrel{\mathchoice {\vcenter{\offinterlineskip +\halign{\hfil +$\displaystyle##$\hfil\cr>\cr\noalign{\vskip-1pt}<\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr +>\cr\noalign{\vskip-1pt}<\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr +>\cr\noalign{\vskip-0.8pt}<\cr}}} +{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr +>\cr\noalign{\vskip-0.3pt}<\cr}}}}} +\def\bbbr{{\rm I\!R}} %reelle Zahlen +\def\bbbm{{\rm I\!M}} +\def\bbbn{{\rm I\!N}} %natuerliche Zahlen +\def\bbbf{{\rm I\!F}} +\def\bbbh{{\rm I\!H}} +\def\bbbk{{\rm I\!K}} +\def\bbbp{{\rm I\!P}} +\def\bbbone{{\mathchoice {\rm 1\mskip-4mu l} {\rm 1\mskip-4mu l} +{\rm 1\mskip-4.5mu l} {\rm 1\mskip-5mu l}}} +\def\bbbc{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm C$}\hbox{\hbox +to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\textstyle\rm C$}\hbox{\hbox +to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptstyle\rm C$}\hbox{\hbox +to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptscriptstyle\rm C$}\hbox{\hbox +to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}}} +\def\bbbq{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm +Q$}\hbox{\raise +0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}} +{\setbox0=\hbox{$\textstyle\rm Q$}\hbox{\raise +0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptstyle\rm Q$}\hbox{\raise +0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptscriptstyle\rm Q$}\hbox{\raise +0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}}} +\def\bbbt{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm +T$}\hbox{\hbox to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\textstyle\rm T$}\hbox{\hbox +to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptstyle\rm T$}\hbox{\hbox +to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptscriptstyle\rm T$}\hbox{\hbox +to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}}} +\def\bbbs{{\mathchoice +{\setbox0=\hbox{$\displaystyle \rm S$}\hbox{\raise0.5\ht0\hbox +to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox +to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}} +{\setbox0=\hbox{$\textstyle \rm S$}\hbox{\raise0.5\ht0\hbox +to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox +to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptstyle \rm S$}\hbox{\raise0.5\ht0\hbox +to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox +to0pt{\kern0.5\wd0\vrule height0.45\ht0\hss}\box0}} +{\setbox0=\hbox{$\scriptscriptstyle\rm S$}\hbox{\raise0.5\ht0\hbox +to0pt{\kern0.4\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox +to0pt{\kern0.55\wd0\vrule height0.45\ht0\hss}\box0}}}} +\def\bbbz{{\mathchoice {\hbox{$\mathsf\textstyle Z\kern-0.4em Z$}} +{\hbox{$\mathsf\textstyle Z\kern-0.4em Z$}} +{\hbox{$\mathsf\scriptstyle Z\kern-0.3em Z$}} +{\hbox{$\mathsf\scriptscriptstyle Z\kern-0.2em Z$}}}} + +\let\ts\, + +\setlength\leftmargini {17\p@} +\setlength\leftmargin {\leftmargini} +\setlength\leftmarginii {\leftmargini} +\setlength\leftmarginiii {\leftmargini} +\setlength\leftmarginiv {\leftmargini} +\setlength \labelsep {.5em} +\setlength \labelwidth{\leftmargini} +\addtolength\labelwidth{-\labelsep} + +\def\@listI{\leftmargin\leftmargini + \parsep 0\p@ \@plus1\p@ \@minus\p@ + \topsep 8\p@ \@plus2\p@ \@minus4\p@ + \itemsep0\p@} +\let\@listi\@listI +\@listi +\def\@listii {\leftmargin\leftmarginii + \labelwidth\leftmarginii + \advance\labelwidth-\labelsep + \topsep 0\p@ \@plus2\p@ \@minus\p@} +\def\@listiii{\leftmargin\leftmarginiii + \labelwidth\leftmarginiii + \advance\labelwidth-\labelsep + \topsep 0\p@ \@plus\p@\@minus\p@ + \parsep \z@ + \partopsep \p@ \@plus\z@ \@minus\p@} + +\renewcommand\labelitemi{\normalfont\bfseries --} +\renewcommand\labelitemii{$\m@th\bullet$} + +\setlength\arraycolsep{1.4\p@} +\setlength\tabcolsep{1.4\p@} + +\def\tableofcontents{\chapter*{\contentsname\@mkboth{{\contentsname}}% + {{\contentsname}}} + \def\authcount##1{\setcounter{auco}{##1}\setcounter{@auth}{1}} + \def\lastand{\ifnum\value{auco}=2\relax + \unskip{} \andname\ + \else + \unskip \lastandname\ + \fi}% + \def\and{\stepcounter{@auth}\relax + \ifnum\value{@auth}=\value{auco}% + \lastand + \else + \unskip, + \fi}% + \@starttoc{toc}\if@restonecol\twocolumn\fi} + +\def\l@part#1#2{\addpenalty{\@secpenalty}% + \addvspace{2em plus\p@}% % space above part line + \begingroup + \parindent \z@ + \rightskip \z@ plus 5em + \hrule\vskip5pt + \large % same size as for a contribution heading + \bfseries\boldmath % set line in boldface + \leavevmode % TeX command to enter horizontal mode. + #1\par + \vskip5pt + \hrule + \vskip1pt + \nobreak % Never break after part entry + \endgroup} + +\def\@dotsep{2} + +\let\phantomsection=\relax + +\def\hyperhrefextend{\ifx\hyper@anchor\@undefined\else +{}\fi} + +\def\addnumcontentsmark#1#2#3{% +\addtocontents{#1}{\protect\contentsline{#2}{\protect\numberline + {\thechapter}#3}{\thepage}\hyperhrefextend}}% +\def\addcontentsmark#1#2#3{% +\addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}\hyperhrefextend}}% +\def\addcontentsmarkwop#1#2#3{% +\addtocontents{#1}{\protect\contentsline{#2}{#3}{0}\hyperhrefextend}}% + +\def\@adcmk[#1]{\ifcase #1 \or +\def\@gtempa{\addnumcontentsmark}% + \or \def\@gtempa{\addcontentsmark}% + \or \def\@gtempa{\addcontentsmarkwop}% + \fi\@gtempa{toc}{chapter}% +} +\def\addtocmark{% +\phantomsection +\@ifnextchar[{\@adcmk}{\@adcmk[3]}% +} + +\def\l@chapter#1#2{\addpenalty{-\@highpenalty} + \vskip 1.0em plus 1pt \@tempdima 1.5em \begingroup + \parindent \z@ \rightskip \@tocrmarg + \advance\rightskip by 0pt plus 2cm + \parfillskip -\rightskip \pretolerance=10000 + \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip + {\large\bfseries\boldmath#1}\ifx0#2\hfil\null + \else + \nobreak + \leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern + \@dotsep mu$}\hfill + \nobreak\hbox to\@pnumwidth{\hss #2}% + \fi\par + \penalty\@highpenalty \endgroup} + +\def\l@title#1#2{\addpenalty{-\@highpenalty} + \addvspace{8pt plus 1pt} + \@tempdima \z@ + \begingroup + \parindent \z@ \rightskip \@tocrmarg + \advance\rightskip by 0pt plus 2cm + \parfillskip -\rightskip \pretolerance=10000 + \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip + #1\nobreak + \leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern + \@dotsep mu$}\hfill + \nobreak\hbox to\@pnumwidth{\hss #2}\par + \penalty\@highpenalty \endgroup} + +\def\l@author#1#2{\addpenalty{\@highpenalty} + \@tempdima=15\p@ %\z@ + \begingroup + \parindent \z@ \rightskip \@tocrmarg + \advance\rightskip by 0pt plus 2cm + \pretolerance=10000 + \leavevmode \advance\leftskip\@tempdima %\hskip -\leftskip + \textit{#1}\par + \penalty\@highpenalty \endgroup} + +\setcounter{tocdepth}{0} +\newdimen\tocchpnum +\newdimen\tocsecnum +\newdimen\tocsectotal +\newdimen\tocsubsecnum +\newdimen\tocsubsectotal +\newdimen\tocsubsubsecnum +\newdimen\tocsubsubsectotal +\newdimen\tocparanum +\newdimen\tocparatotal +\newdimen\tocsubparanum +\tocchpnum=\z@ % no chapter numbers +\tocsecnum=15\p@ % section 88. plus 2.222pt +\tocsubsecnum=23\p@ % subsection 88.8 plus 2.222pt +\tocsubsubsecnum=27\p@ % subsubsection 88.8.8 plus 1.444pt +\tocparanum=35\p@ % paragraph 88.8.8.8 plus 1.666pt +\tocsubparanum=43\p@ % subparagraph 88.8.8.8.8 plus 1.888pt +\def\calctocindent{% +\tocsectotal=\tocchpnum +\advance\tocsectotal by\tocsecnum +\tocsubsectotal=\tocsectotal +\advance\tocsubsectotal by\tocsubsecnum +\tocsubsubsectotal=\tocsubsectotal +\advance\tocsubsubsectotal by\tocsubsubsecnum +\tocparatotal=\tocsubsubsectotal +\advance\tocparatotal by\tocparanum} +\calctocindent + +\def\l@section{\@dottedtocline{1}{\tocchpnum}{\tocsecnum}} +\def\l@subsection{\@dottedtocline{2}{\tocsectotal}{\tocsubsecnum}} +\def\l@subsubsection{\@dottedtocline{3}{\tocsubsectotal}{\tocsubsubsecnum}} +\def\l@paragraph{\@dottedtocline{4}{\tocsubsubsectotal}{\tocparanum}} +\def\l@subparagraph{\@dottedtocline{5}{\tocparatotal}{\tocsubparanum}} + +\def\listoffigures{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn + \fi\section*{\listfigurename\@mkboth{{\listfigurename}}{{\listfigurename}}} + \@starttoc{lof}\if@restonecol\twocolumn\fi} +\def\l@figure{\@dottedtocline{1}{0em}{1.5em}} + +\def\listoftables{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn + \fi\section*{\listtablename\@mkboth{{\listtablename}}{{\listtablename}}} + \@starttoc{lot}\if@restonecol\twocolumn\fi} +\let\l@table\l@figure + +\renewcommand\listoffigures{% + \section*{\listfigurename + \@mkboth{\listfigurename}{\listfigurename}}% + \@starttoc{lof}% + } + +\renewcommand\listoftables{% + \section*{\listtablename + \@mkboth{\listtablename}{\listtablename}}% + \@starttoc{lot}% + } + +\ifx\oribibl\undefined +\ifx\citeauthoryear\undefined +\renewenvironment{thebibliography}[1] + {\section*{\refname} + \def\@biblabel##1{##1.} + \small + \list{\@biblabel{\@arabic\c@enumiv}}% + {\settowidth\labelwidth{\@biblabel{#1}}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep + \if@openbib + \advance\leftmargin\bibindent + \itemindent -\bibindent + \listparindent \itemindent + \parsep \z@ + \fi + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{\@arabic\c@enumiv}}% + \if@openbib + \renewcommand\newblock{\par}% + \else + \renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}% + \fi + \sloppy\clubpenalty4000\widowpenalty4000% + \sfcode`\.=\@m} + {\def\@noitemerr + {\@latex@warning{Empty `thebibliography' environment}}% + \endlist} +\def\@lbibitem[#1]#2{\item[{[#1]}\hfill]\if@filesw + {\let\protect\noexpand\immediate + \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces} +\newcount\@tempcntc +\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi + \@tempcnta\z@\@tempcntb\m@ne\def\@citea{}\@cite{\@for\@citeb:=#2\do + {\@ifundefined + {b@\@citeb}{\@citeo\@tempcntb\m@ne\@citea\def\@citea{,}{\bfseries + ?}\@warning + {Citation `\@citeb' on page \thepage \space undefined}}% + {\setbox\z@\hbox{\global\@tempcntc0\csname b@\@citeb\endcsname\relax}% + \ifnum\@tempcntc=\z@ \@citeo\@tempcntb\m@ne + \@citea\def\@citea{,}\hbox{\csname b@\@citeb\endcsname}% + \else + \advance\@tempcntb\@ne + \ifnum\@tempcntb=\@tempcntc + \else\advance\@tempcntb\m@ne\@citeo + \@tempcnta\@tempcntc\@tempcntb\@tempcntc\fi\fi}}\@citeo}{#1}} +\def\@citeo{\ifnum\@tempcnta>\@tempcntb\else + \@citea\def\@citea{,\,\hskip\z@skip}% + \ifnum\@tempcnta=\@tempcntb\the\@tempcnta\else + {\advance\@tempcnta\@ne\ifnum\@tempcnta=\@tempcntb \else + \def\@citea{--}\fi + \advance\@tempcnta\m@ne\the\@tempcnta\@citea\the\@tempcntb}\fi\fi} +\else +\renewenvironment{thebibliography}[1] + {\section*{\refname} + \small + \list{}% + {\settowidth\labelwidth{}% + \leftmargin\parindent + \itemindent=-\parindent + \labelsep=\z@ + \if@openbib + \advance\leftmargin\bibindent + \itemindent -\bibindent + \listparindent \itemindent + \parsep \z@ + \fi + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{}}% + \if@openbib + \renewcommand\newblock{\par}% + \else + \renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}% + \fi + \sloppy\clubpenalty4000\widowpenalty4000% + \sfcode`\.=\@m} + {\def\@noitemerr + {\@latex@warning{Empty `thebibliography' environment}}% + \endlist} + \def\@cite#1{#1}% + \def\@lbibitem[#1]#2{\item[]\if@filesw + {\def\protect##1{\string ##1\space}\immediate + \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces} + \fi +\else +\@cons\@openbib@code{\noexpand\small} +\fi + +\def\idxquad{\hskip 10\p@}% space that divides entry from number + +\def\@idxitem{\par\hangindent 10\p@} + +\def\subitem{\par\setbox0=\hbox{--\enspace}% second order + \noindent\hangindent\wd0\box0}% index entry + +\def\subsubitem{\par\setbox0=\hbox{--\,--\enspace}% third + \noindent\hangindent\wd0\box0}% order index entry + +\def\indexspace{\par \vskip 10\p@ plus5\p@ minus3\p@\relax} + +\renewenvironment{theindex} + {\@mkboth{\indexname}{\indexname}% + \thispagestyle{empty}\parindent\z@ + \parskip\z@ \@plus .3\p@\relax + \let\item\par + \def\,{\relax\ifmmode\mskip\thinmuskip + \else\hskip0.2em\ignorespaces\fi}% + \normalfont\small + \begin{multicols}{2}[\@makeschapterhead{\indexname}]% + } + {\end{multicols}} + +\renewcommand\footnoterule{% + \kern-3\p@ + \hrule\@width 2truecm + \kern2.6\p@} + \newdimen\fnindent + \fnindent1em +\long\def\@makefntext#1{% + \parindent \fnindent% + \leftskip \fnindent% + \noindent + \llap{\hb@xt@1em{\hss\@makefnmark\ }}\ignorespaces#1} + +\long\def\@makecaption#1#2{% + \small + \vskip\abovecaptionskip + \sbox\@tempboxa{{\bfseries #1.} #2}% + \ifdim \wd\@tempboxa >\hsize + {\bfseries #1.} #2\par + \else + \global \@minipagefalse + \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \vskip\belowcaptionskip} + +\def\fps@figure{htbp} +\def\fnum@figure{\figurename\thinspace\thefigure} +\def \@floatboxreset {% + \reset@font + \small + \@setnobreak + \@setminipage +} +\def\fps@table{htbp} +\def\fnum@table{\tablename~\thetable} +\renewenvironment{table} + {\setlength\abovecaptionskip{0\p@}% + \setlength\belowcaptionskip{10\p@}% + \@float{table}} + {\end@float} +\renewenvironment{table*} + {\setlength\abovecaptionskip{0\p@}% + \setlength\belowcaptionskip{10\p@}% + \@dblfloat{table}} + {\end@dblfloat} + +\long\def\@caption#1[#2]#3{\par\addcontentsline{\csname + ext@#1\endcsname}{#1}{\protect\numberline{\csname + the#1\endcsname}{\ignorespaces #2}}\begingroup + \@parboxrestore + \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par + \endgroup} + +% LaTeX does not provide a command to enter the authors institute +% addresses. The \institute command is defined here. + +\newcounter{@inst} +\newcounter{@auth} +\newcounter{auco} +\newdimen\instindent +\newbox\authrun +\newtoks\authorrunning +\newtoks\tocauthor +\newbox\titrun +\newtoks\titlerunning +\newtoks\toctitle + +\def\clearheadinfo{\gdef\@author{No Author Given}% + \gdef\@title{No Title Given}% + \gdef\@subtitle{}% + \gdef\@institute{No Institute Given}% + \gdef\@thanks{}% + \global\titlerunning={}\global\authorrunning={}% + \global\toctitle={}\global\tocauthor={}} + +\def\institute#1{\gdef\@institute{#1}} + +\def\institutename{\par + \begingroup + \parskip=\z@ + \parindent=\z@ + \setcounter{@inst}{1}% + \def\and{\par\stepcounter{@inst}% + \noindent$^{\the@inst}$\enspace\ignorespaces}% + \setbox0=\vbox{\def\thanks##1{}\@institute}% + \ifnum\c@@inst=1\relax + \gdef\fnnstart{0}% + \else + \xdef\fnnstart{\c@@inst}% + \setcounter{@inst}{1}% + \noindent$^{\the@inst}$\enspace + \fi + \ignorespaces + \@institute\par + \endgroup} + +\def\@fnsymbol#1{\ensuremath{\ifcase#1\or\star\or{\star\star}\or + {\star\star\star}\or \dagger\or \ddagger\or + \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger + \or \ddagger\ddagger \else\@ctrerr\fi}} + +\def\inst#1{\unskip$^{#1}$} +\def\fnmsep{\unskip$^,$} +\def\email#1{{\tt#1}} +\AtBeginDocument{\@ifundefined{url}{\def\url#1{#1}}{}% +\@ifpackageloaded{babel}{% +\@ifundefined{extrasenglish}{}{\addto\extrasenglish{\switcht@albion}}% +\@ifundefined{extrasfrenchb}{}{\addto\extrasfrenchb{\switcht@francais}}% +\@ifundefined{extrasgerman}{}{\addto\extrasgerman{\switcht@deutsch}}% +}{\switcht@@therlang}% +\providecommand{\keywords}[1]{\par\addvspace\baselineskip +\noindent\keywordname\enspace\ignorespaces#1}% +} +\def\homedir{\~{ }} + +\def\subtitle#1{\gdef\@subtitle{#1}} +\clearheadinfo +% +%%% to avoid hyperref warnings +\providecommand*{\toclevel@author}{999} +%%% to make title-entry parent of section-entries +\providecommand*{\toclevel@title}{0} +% +\renewcommand\maketitle{\newpage +\phantomsection + \refstepcounter{chapter}% + \stepcounter{section}% + \setcounter{section}{0}% + \setcounter{subsection}{0}% + \setcounter{figure}{0} + \setcounter{table}{0} + \setcounter{equation}{0} + \setcounter{footnote}{0}% + \begingroup + \parindent=\z@ + \renewcommand\thefootnote{\@fnsymbol\c@footnote}% + \if@twocolumn + \ifnum \col@number=\@ne + \@maketitle + \else + \twocolumn[\@maketitle]% + \fi + \else + \newpage + \global\@topnum\z@ % Prevents figures from going at top of page. + \@maketitle + \fi + \thispagestyle{empty}\@thanks +% + \def\\{\unskip\ \ignorespaces}\def\inst##1{\unskip{}}% + \def\thanks##1{\unskip{}}\def\fnmsep{\unskip}% + \instindent=\hsize + \advance\instindent by-\headlineindent + \if!\the\toctitle!\addcontentsline{toc}{title}{\@title}\else + \addcontentsline{toc}{title}{\the\toctitle}\fi + \if@runhead + \if!\the\titlerunning!\else + \edef\@title{\the\titlerunning}% + \fi + \global\setbox\titrun=\hbox{\small\rm\unboldmath\ignorespaces\@title}% + \ifdim\wd\titrun>\instindent + \typeout{Title too long for running head. Please supply}% + \typeout{a shorter form with \string\titlerunning\space prior to + \string\maketitle}% + \global\setbox\titrun=\hbox{\small\rm + Title Suppressed Due to Excessive Length}% + \fi + \xdef\@title{\copy\titrun}% + \fi +% + \if!\the\tocauthor!\relax + {\def\and{\noexpand\protect\noexpand\and}% + \protected@xdef\toc@uthor{\@author}}% + \else + \def\\{\noexpand\protect\noexpand\newline}% + \protected@xdef\scratch{\the\tocauthor}% + \protected@xdef\toc@uthor{\scratch}% + \fi + \addtocontents{toc}{\noexpand\protect\noexpand\authcount{\the\c@auco}}% + \addcontentsline{toc}{author}{\toc@uthor}% + \if@runhead + \if!\the\authorrunning! + \value{@inst}=\value{@auth}% + \setcounter{@auth}{1}% + \else + \edef\@author{\the\authorrunning}% + \fi + \global\setbox\authrun=\hbox{\small\unboldmath\@author\unskip}% + \ifdim\wd\authrun>\instindent + \typeout{Names of authors too long for running head. Please supply}% + \typeout{a shorter form with \string\authorrunning\space prior to + \string\maketitle}% + \global\setbox\authrun=\hbox{\small\rm + Authors Suppressed Due to Excessive Length}% + \fi + \xdef\@author{\copy\authrun}% + \markboth{\@author}{\@title}% + \fi + \endgroup + \setcounter{footnote}{\fnnstart}% + \clearheadinfo} +% +\def\@maketitle{\newpage + \markboth{}{}% + \def\lastand{\ifnum\value{@inst}=2\relax + \unskip{} \andname\ + \else + \unskip \lastandname\ + \fi}% + \def\and{\stepcounter{@auth}\relax + \ifnum\value{@auth}=\value{@inst}% + \lastand + \else + \unskip, + \fi}% + \begin{center}% + \let\newline\\ + {\Large \bfseries\boldmath + \pretolerance=10000 + \@title \par}\vskip .8cm +\if!\@subtitle!\else {\large \bfseries\boldmath + \vskip -.65cm + \pretolerance=10000 + \@subtitle \par}\vskip .8cm\fi + \setbox0=\vbox{\setcounter{@auth}{1}\def\and{\stepcounter{@auth}}% + \def\thanks##1{}\@author}% + \global\value{@inst}=\value{@auth}% + \global\value{auco}=\value{@auth}% + \setcounter{@auth}{1}% +{\lineskip .5em +\noindent\ignorespaces +\@author\vskip.35cm} + {\small\institutename} + \end{center}% + } + +% definition of the "\spnewtheorem" command. +% +% Usage: +% +% \spnewtheorem{env_nam}{caption}[within]{cap_font}{body_font} +% or \spnewtheorem{env_nam}[numbered_like]{caption}{cap_font}{body_font} +% or \spnewtheorem*{env_nam}{caption}{cap_font}{body_font} +% +% New is "cap_font" and "body_font". It stands for +% fontdefinition of the caption and the text itself. +% +% "\spnewtheorem*" gives a theorem without number. +% +% A defined spnewthoerem environment is used as described +% by Lamport. +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def\@thmcountersep{} +\def\@thmcounterend{.} + +\def\spnewtheorem{\@ifstar{\@sthm}{\@Sthm}} + +% definition of \spnewtheorem with number + +\def\@spnthm#1#2{% + \@ifnextchar[{\@spxnthm{#1}{#2}}{\@spynthm{#1}{#2}}} +\def\@Sthm#1{\@ifnextchar[{\@spothm{#1}}{\@spnthm{#1}}} + +\def\@spxnthm#1#2[#3]#4#5{\expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}\@addtoreset{#1}{#3}% + \expandafter\xdef\csname the#1\endcsname{\expandafter\noexpand + \csname the#3\endcsname \noexpand\@thmcountersep \@thmcounter{#1}}% + \expandafter\xdef\csname #1name\endcsname{#2}% + \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#4}{#5}}% + \global\@namedef{end#1}{\@endtheorem}}} + +\def\@spynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}% + \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}% + \expandafter\xdef\csname #1name\endcsname{#2}% + \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#3}{#4}}% + \global\@namedef{end#1}{\@endtheorem}}} + +\def\@spothm#1[#2]#3#4#5{% + \@ifundefined{c@#2}{\@latexerr{No theorem environment `#2' defined}\@eha}% + {\expandafter\@ifdefinable\csname #1\endcsname + {\newaliascnt{#1}{#2}% + \expandafter\xdef\csname #1name\endcsname{#3}% + \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#4}{#5}}% + \global\@namedef{end#1}{\@endtheorem}}}} + +\def\@spthm#1#2#3#4{\topsep 7\p@ \@plus2\p@ \@minus4\p@ +\refstepcounter{#1}% +\@ifnextchar[{\@spythm{#1}{#2}{#3}{#4}}{\@spxthm{#1}{#2}{#3}{#4}}} + +\def\@spxthm#1#2#3#4{\@spbegintheorem{#2}{\csname the#1\endcsname}{#3}{#4}% + \ignorespaces} + +\def\@spythm#1#2#3#4[#5]{\@spopargbegintheorem{#2}{\csname + the#1\endcsname}{#5}{#3}{#4}\ignorespaces} + +\def\@spbegintheorem#1#2#3#4{\trivlist + \item[\hskip\labelsep{#3#1\ #2\@thmcounterend}]#4} + +\def\@spopargbegintheorem#1#2#3#4#5{\trivlist + \item[\hskip\labelsep{#4#1\ #2}]{#4(#3)\@thmcounterend\ }#5} + +% definition of \spnewtheorem* without number + +\def\@sthm#1#2{\@Ynthm{#1}{#2}} + +\def\@Ynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname + {\global\@namedef{#1}{\@Thm{\csname #1name\endcsname}{#3}{#4}}% + \expandafter\xdef\csname #1name\endcsname{#2}% + \global\@namedef{end#1}{\@endtheorem}}} + +\def\@Thm#1#2#3{\topsep 7\p@ \@plus2\p@ \@minus4\p@ +\@ifnextchar[{\@Ythm{#1}{#2}{#3}}{\@Xthm{#1}{#2}{#3}}} + +\def\@Xthm#1#2#3{\@Begintheorem{#1}{#2}{#3}\ignorespaces} + +\def\@Ythm#1#2#3[#4]{\@Opargbegintheorem{#1} + {#4}{#2}{#3}\ignorespaces} + +\def\@Begintheorem#1#2#3{#3\trivlist + \item[\hskip\labelsep{#2#1\@thmcounterend}]} + +\def\@Opargbegintheorem#1#2#3#4{#4\trivlist + \item[\hskip\labelsep{#3#1}]{#3(#2)\@thmcounterend\ }} + +\if@envcntsect + \def\@thmcountersep{.} + \spnewtheorem{theorem}{Theorem}[section]{\bfseries}{\itshape} +\else + \spnewtheorem{theorem}{Theorem}{\bfseries}{\itshape} + \if@envcntreset + \@addtoreset{theorem}{section} + \else + \@addtoreset{theorem}{chapter} + \fi +\fi + +%definition of divers theorem environments +\spnewtheorem*{claim}{Claim}{\itshape}{\rmfamily} +\spnewtheorem*{proof}{Proof}{\itshape}{\rmfamily} +\if@envcntsame % alle Umgebungen wie Theorem. + \def\spn@wtheorem#1#2#3#4{\@spothm{#1}[theorem]{#2}{#3}{#4}} +\else % alle Umgebungen mit eigenem Zaehler + \if@envcntsect % mit section numeriert + \def\spn@wtheorem#1#2#3#4{\@spxnthm{#1}{#2}[section]{#3}{#4}} + \else % nicht mit section numeriert + \if@envcntreset + \def\spn@wtheorem#1#2#3#4{\@spynthm{#1}{#2}{#3}{#4} + \@addtoreset{#1}{section}} + \else + \def\spn@wtheorem#1#2#3#4{\@spynthm{#1}{#2}{#3}{#4} + \@addtoreset{#1}{chapter}}% + \fi + \fi +\fi +\spn@wtheorem{case}{Case}{\itshape}{\rmfamily} +\spn@wtheorem{conjecture}{Conjecture}{\itshape}{\rmfamily} +\spn@wtheorem{corollary}{Corollary}{\bfseries}{\itshape} +\spn@wtheorem{definition}{Definition}{\bfseries}{\itshape} +\spn@wtheorem{example}{Example}{\itshape}{\rmfamily} +\spn@wtheorem{exercise}{Exercise}{\itshape}{\rmfamily} +\spn@wtheorem{lemma}{Lemma}{\bfseries}{\itshape} +\spn@wtheorem{note}{Note}{\itshape}{\rmfamily} +\spn@wtheorem{problem}{Problem}{\itshape}{\rmfamily} +\spn@wtheorem{property}{Property}{\itshape}{\rmfamily} +\spn@wtheorem{proposition}{Proposition}{\bfseries}{\itshape} +\spn@wtheorem{question}{Question}{\itshape}{\rmfamily} +\spn@wtheorem{solution}{Solution}{\itshape}{\rmfamily} +\spn@wtheorem{remark}{Remark}{\itshape}{\rmfamily} + +\def\@takefromreset#1#2{% + \def\@tempa{#1}% + \let\@tempd\@elt + \def\@elt##1{% + \def\@tempb{##1}% + \ifx\@tempa\@tempb\else + \@addtoreset{##1}{#2}% + \fi}% + \expandafter\expandafter\let\expandafter\@tempc\csname cl@#2\endcsname + \expandafter\def\csname cl@#2\endcsname{}% + \@tempc + \let\@elt\@tempd} + +\def\theopargself{\def\@spopargbegintheorem##1##2##3##4##5{\trivlist + \item[\hskip\labelsep{##4##1\ ##2}]{##4##3\@thmcounterend\ }##5} + \def\@Opargbegintheorem##1##2##3##4{##4\trivlist + \item[\hskip\labelsep{##3##1}]{##3##2\@thmcounterend\ }} + } + +\renewenvironment{abstract}{% + \list{}{\advance\topsep by0.35cm\relax\small + \leftmargin=1cm + \labelwidth=\z@ + \listparindent=\z@ + \itemindent\listparindent + \rightmargin\leftmargin}\item[\hskip\labelsep + \bfseries\abstractname]} + {\endlist} + +\newdimen\headlineindent % dimension for space between +\headlineindent=1.166cm % number and text of headings. + +\def\ps@headings{\let\@mkboth\@gobbletwo + \let\@oddfoot\@empty\let\@evenfoot\@empty + \def\@evenhead{\normalfont\small\rlap{\thepage}\hspace{\headlineindent}% + \leftmark\hfil} + \def\@oddhead{\normalfont\small\hfil\rightmark\hspace{\headlineindent}% + \llap{\thepage}} + \def\chaptermark##1{}% + \def\sectionmark##1{}% + \def\subsectionmark##1{}} + +\def\ps@titlepage{\let\@mkboth\@gobbletwo + \let\@oddfoot\@empty\let\@evenfoot\@empty + \def\@evenhead{\normalfont\small\rlap{\thepage}\hspace{\headlineindent}% + \hfil} + \def\@oddhead{\normalfont\small\hfil\hspace{\headlineindent}% + \llap{\thepage}} + \def\chaptermark##1{}% + \def\sectionmark##1{}% + \def\subsectionmark##1{}} + +\if@runhead\ps@headings\else +\ps@empty\fi + +\setlength\arraycolsep{1.4\p@} +\setlength\tabcolsep{1.4\p@} + +\endinput +%end of file llncs.cls diff --git "a/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/Ukrainian paper/phd.aux" "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/Ukrainian paper/phd.aux" new file mode 100644 index 0000000..1e8acc0 --- /dev/null +++ "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/Ukrainian paper/phd.aux" @@ -0,0 +1,31 @@ +\relax +\providecommand\hyper@newdestlabel[2]{} +\catcode `"\active +\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument} +\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined +\global\let\oldcontentsline\contentsline +\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}} +\global\let\oldnewlabel\newlabel +\gdef\newlabel#1#2{\newlabelxx{#1}#2} +\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}} +\AtEndDocument{\ifx\hyper@anchor\@undefined +\let\contentsline\oldcontentsline +\let\newlabel\oldnewlabel +\fi} +\fi} +\global\let\hyper@last\relax +\gdef\HyperFirstAtBeginDocument#1{#1} +\providecommand\HyField@AuxAddToFields[1]{} +\providecommand\HyField@AuxAddToCoFields[2]{} +\providecommand \oddpage@label [2]{} +\babel@aux{ukrainian}{} +\@writefile{toc}{\contentsline {chapter}{\IeC {\CYRV }\IeC {\cyrs }\IeC {\cyrt }\IeC {\cyru }\IeC {\cyrp }}{3}{chapter*.1}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\@writefile{toc}{\contentsline {paragraph}{\bfseries \IeC {\CYRA }\IeC {\cyrk }\IeC {\cyrt }\IeC {\cyru }\IeC {\cyra }\IeC {\cyrl }\IeC {\cyrsftsn }\IeC {\cyrn }\IeC {\cyrii }\IeC {\cyrs }\IeC {\cyrt }\IeC {\cyrsftsn } \IeC {\cyrt }\IeC {\cyre }\IeC {\cyrm }\IeC {\cyri }.}{3}{section*.2}} +\@writefile{toc}{\contentsline {paragraph}{\bfseries \IeC {\CYRV }\IeC {\cyrz }\IeC {\cyra }\IeC {\cyrie }\IeC {\cyrm }\IeC {\cyro }\IeC {\cyrz }\IeC {\cyrv }'\IeC {\cyrya }\IeC {\cyrz }\IeC {\cyro }\IeC {\cyrk } \IeC {\cyrr }\IeC {\cyro }\IeC {\cyrb }\IeC {\cyro }\IeC {\cyrt }\IeC {\cyri } \IeC {\cyrz } \IeC {\cyrn }\IeC {\cyra }\IeC {\cyru }\IeC {\cyrk }\IeC {\cyro }\IeC {\cyrv }\IeC {\cyri }\IeC {\cyrm }\IeC {\cyri } \IeC {\cyrp }\IeC {\cyrr }\IeC {\cyro }\IeC {\cyrg }\IeC {\cyrr }\IeC {\cyra }\IeC {\cyrm }\IeC {\cyra }\IeC {\cyrm }\IeC {\cyri }, \IeC {\cyrp }\IeC {\cyrl }\IeC {\cyra }\IeC {\cyrn }\IeC {\cyra }\IeC {\cyrm }\IeC {\cyri }, \IeC {\cyrt }\IeC {\cyre }\IeC {\cyrm }\IeC {\cyra }\IeC {\cyrm }\IeC {\cyri }.}{3}{section*.3}} +\@writefile{toc}{\contentsline {paragraph}{\bfseries \IeC {\CYRM }\IeC {\cyre }\IeC {\cyrt }\IeC {\cyra } \IeC {\cyrii } \IeC {\cyrz }\IeC {\cyra }\IeC {\cyrv }\IeC {\cyrd }\IeC {\cyra }\IeC {\cyrn }\IeC {\cyrn }\IeC {\cyrya } \IeC {\cyrd }\IeC {\cyro }\IeC {\cyrs }\IeC {\cyrl }\IeC {\cyrii }\IeC {\cyrd }\IeC {\cyrzh }\IeC {\cyre }\IeC {\cyrn }\IeC {\cyrn }\IeC {\cyrya }.}{4}{section*.4}} +\@writefile{toc}{\contentsline {chapter}{\numberline {{\cyrillictext \CYRR \cyro \cyrz \cyrd \cyrii \cyrl }\nobreakspace 1}\IeC {\CYRB }\IeC {\cyra }\IeC {\cyrl }\IeC {\cyra }\IeC {\cyrn }\IeC {\cyrs }\IeC {\cyru }\IeC {\cyrv }\IeC {\cyra }\IeC {\cyrn }\IeC {\cyrn }\IeC {\cyrya } \IeC {\cyru }\IeC {\cyrz }\IeC {\cyrg }\IeC {\cyro }\IeC {\cyrd }\IeC {\cyrzh }\IeC {\cyre }\IeC {\cyrn }\IeC {\cyro }\IeC {\cyrs }\IeC {\cyrt }\IeC {\cyrii }}{5}{chapter.1}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\@writefile{loa}{\addvspace {10\p@ }} diff --git "a/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/Ukrainian paper/phd.out" "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/Ukrainian paper/phd.out" new file mode 100644 index 0000000..ae53657 --- /dev/null +++ "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/Ukrainian paper/phd.out" @@ -0,0 +1,2 @@ +\BOOKMARK [0][-]{chapter*.1}{}{}% 1 +\BOOKMARK [0][-]{chapter.1}{ }{}% 2 diff --git "a/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/Ukrainian paper/phd.tex" "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/Ukrainian paper/phd.tex" new file mode 100644 index 0000000..e95f7b7 --- /dev/null +++ "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/Ukrainian paper/phd.tex" @@ -0,0 +1,248 @@ +%% +%% This is file `xampl-thesis.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% vakthesis.dtx (with options: `xampl-thesis') +%% +%% IMPORTANT NOTICE: +%% +%% For the copyright see the source file. +%% +%% Any modified versions of this file must be renamed +%% with new filenames distinct from xampl-thesis.tex. +%% +%% For distribution of the original source see the terms +%% for copying and modification in the file vakthesis.dtx. +%% +%% This generated file may be distributed as long as the +%% original source files, as listed above, are part of the +%% same distribution. (The sources need not necessarily be +%% in the same archive or directory.) +% Існують кілька опцій, які необхідно вказувати як факультативний +% аргумент команди \documentclass. Наприклад, для докторської +% дисертації необхідно написати +% \documentclass[d]{vakthesis} + +% Налагодження кодування шрифта, кодування вхідного файла +% та вибір необхідних мов + +\documentclass[14pt]{vakthesis} +\usepackage{extsizes} +\usepackage{cmap} % для кодировки шрифтов в pdf +\usepackage[T1,T2A]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage[english,ukrainian]{babel} + +%\usepackage{libertine} +%\usepackage[letterspace=-36]{microtype} + +% Підключення необхідних пакетів. Наприклад, +% Пакети AMS для підтримки математики, теорем, спеціальних шрифтів +% \usepackage{phd-thesis-library} +\usepackage{packages} +\allowdisplaybreaks + + +% Налагодження параметрів сторінки (зокрема берегів). +% Наприклад, за допомогою пакета geometry +\usepackage{geometry} +\geometry{hmargin={30mm,15mm},lines=29,vcentering} + +% Якщо потрібно працювати лише з деякими розділами +%\includeonly{xampl-ch1,xampl-bib} + +% Інформація про використані пакети тощо. +% Може знадобитися для відлагодження класу документа +%\listfiles + + + +% Титульна сторінка +\makeatletter +\def\onesupervisorname{Науковий\ + керівник}% + \def\manysupervisorsname{Наукові\ + керівники} +\makeatother + +\makeatletter +%\def\@maketitle{% +% {\scshape +% \@ifundefined{@institution@office}{\relax}{\@institution@office\par} +% \@institution\par} +% \vspace{\stretch{3}}% +% {\raggedleft \@ifundefined{@secret}{}{\@secret\hfill}% +% На правах\ +% рукопису \par}% +% \vspace{\stretch{2}}% +% {\bfseries\expandafter\emphsurname\@author \par}% +% \vspace{\stretch{2}}% +% {\raggedleft \CYRU\CYRD\CYRK\ \@udc \par}% +% \vspace{\stretch{1}}% +% {\large\bfseries\scshape \@title \par}% +% \vspace{\stretch{2}}% +% \@specialitycode\ --- \@specialityname\par +% \vspace{\stretch{2}}% +% Дисертація\ +% на\ здобуття\ +% вченої\ +% ступені\linebreak[1]% +% \degreename\cyra\ +% \@science\par%?\linebreak[1]% +% \vspace{\stretch{2}}% +% {\raggedleft +% \let\\\@format@person +% \ifx\@supervisor\@empty +% \hbox{}\hbox{}\hbox{} +% \else +% \@supervisors@caption\@supervisors\relax +% \fi +% \par}% +% \vspace{\stretch{3}}% +% \@town\ --- \@year} +%\def\@supervisors@caption{% +% \ifnum\value{@supervisors@count}>1 +% \manysupervisorsname:% +% \else +% \onesupervisorname +% \fi} +%\def\@format@person#1#2{\linebreak[4]% +% \textbf{#1}, \linebreak[1]\@@format@person#2,,\@nil +% \futurelet\next\@delimit@person} +%\def\@@format@person#1,#2,#3\@nil{#1% +% \if\relax#2\relax\else, \linebreak[0]#2\fi} +%\def\@delimit@person{\ifx\relax\next\else,\fi} +%\def\emphsurname#1 #2{\textsc{#1} #2} +%\makeatother + +% Локальні означення +%\hyphenpenalty=10000 +\input{commands} +\input{names} + + +\begin{document} + +%\setdefaultleftmargin{0pt}{}{}{}{}{} + +% Назва дисертації +\title{Математичні імітаційні моделі для забезпечення узгодженості для розподілених сховищ даних} +% Прізвище, ім'я, по батькові здобувача +\author{Жолткевич Галина Григоріївна} +% Прізвище, ім'я, по батькові наукового керівника/консультанта +\supervisor{Рукас Кирило Маркович} +% Науковий ступінь, вчене звання наукового керівника/консультанта + {доктор технічних наук, доцент} +% Спеціальність +%\speciality{01.05.02} +% Варіант із вказуванням факультативних аргументів +\speciality[Математичне моделювання та обчислювальні методи]{01.05.02}[технічних наук] +% Індекс за УДК +\udc{004.042/519.713.2} +% Установа, де виконана робота, і місто +\institution{Міністерство освіти і науки України \linebreak Харківський національний університет імені~В.Н.~Каразіна}{Харків} + % Рік, коли написана дисертація +\date{2019} + +% Тут буде титульна сторінка +\maketitle + +% Зміст +\tableofcontents + +\chapter*{Вступ} + +\paragraph{\bfseries Актуальність теми.} + +В наше сьогодення інноваційні технології з'являються дуже швидко, а існуючі розвиваються з неймовірною швидкістю. Гіперлуп, багаточисленні дослідження космосу, наукові роботи в інших галузях, таких, +як медицина, зелені мережі, а також, більш побутові, але все ще такі потрібні технології, такі, як +комунікації, транспорт, розумні будинки... Не можна нехтувати тим фактом, що всі ці системи потребують +більшої гнучкості, швидкості, надійності та засобів для зберігання інформації також надійно та швидко і доступно, а інколи навіть доступність має бути майже у будь-якій точці земної кулі. +Тому одним з найважливіших компонентів для багатьох таких систем є швидке і надійне розподілене сховище. +В 21 столітті термін "розподілене сховище" становиться вже звичним. Деякі сховища збільшують кількість вузлів, деякі - ні. Причиною цьому є те, що багато з таких систем потребують сильної узгодженості даних. Але якщо збільшувати кількість вузлів для сховища, консистентність падає дуже швидко. А для деяких систем це важлива частина для їх стабільної роботи. + +Бо є дуже відома CAP-теорема, яка стверджує, що неможливо одночасно задовільнити всі три +характеристики для сховища, узгодженість (consistency), доступність (availability), +стійкість до розділення (partition tolerance). + +Ми не збираємося оскаржувати цю теорему, але робимо спробу обійти цю проблему. Механізм для цього і буде темою для цієї роботи. + +\paragraph{\bfseries Взаємозв'язок роботи з науковими програмами, планами, темами.} +Диссертаційна робота виконана згідно з планом \linebreak +научно-исследовательских работ Харьковского национального университета имени В.Н. Каразина +в рамках темы "Математическое и компьютерное моделирование информационных процессов в сложных естественных и технических системах" +(номер государственной регистрации 0112U002098). + + +\paragraph{\bfseries Мета і завдання дослідження.} +Метою роботи являється побудува імітаційних та математичних моделей для механізму +підтримки сильної узгодженості у розподілених сховищах даних, проведення експериментів, оцінювання складності імітаційних моделей, побудува метрик, за якими можна дослідити складність даних моделей, а також розробка +обчислювальних методів для сформованого механізму. Це дозволить оцінити, наскільки можна розширити будь-яку розподілену систему і сформує методи для коректної роботи за такими умовами. + +Для доягнення цієї мети у роботі розв'язані наступні задачі: +%\begin{enumerate}[widest=9999,itemindent=*,leftmargin=0pt] +%\item +%Проведен анализ проявившихся в теории и практике программной инженерии тенденций, +%состоящих в изменении концепций разработки архитектурных решений больших систем обработки информации. +%Это позволило сделать вывод о расширении использования асинхронных архитектурных решений основанных на событийном управлении, +%что обосновывает актуальность задачи совершенствования математических моделей, +%используемых для статического анализа, спецификации и проектирования систем этого класса. +% +%\item +%Проведен анализ существующих событийно-управляемых архитектурных стилей с целью выявления их инвариантных свойств, +%которые должны отражаться в общей системной модели событийно-управляемой системы обработки информации. +%По результатам проведенного анализа построена общая системная модель компонента событийно-управляемой системы обработки информации. +% +%\item +%Исследованы свойства потоков сложных событий на предмет возможности распознавания в них заданных множеств сложных событий. +% +%\item +%Обосновано применение абстрактных предавтоматов для математического моделирования компонентов событийно-управляемых систем обработки информации +%путем доказательства двойственности абстрактных предавтоматов и CEP-машин. +% +%\item +%Рассмотрен вопрос алгоритмической реализуемости CEP-машин. +%Выявлены возможные аномалии вычислимости таких машин и предложен метод их устранения. +% +%\item +%Разработан специальный класс CEP-машин распознающих сложные события описываемые регулярными языками. +%А также, на базе технологий машинного обучения, построен метод их синтеза +% +%\item +%Разработаны прототипы программных утилит статического анализа, +%обеспечивающих верификацию программных компонентов событийно-управляемых систем обработки информации, +%которые реализуют предложенные и обоснованные в работе вычислительные методы. +% +%\item +%Проведена проверка прототипов программных утилит статического анализа путем их использования при разработке программного обеспечения. +%\end{enumerate} + +\chapter{Балансування узгодженості} + +Наскільки нам відомо, що відповідно до CAP-теореми можна задовільнити тільки будь-які дві з трьох характеристик +для розподіленого сховища даних. +В цьому розділі розглядається можливість досягнути компромісу та забезпечити консистентні відповіді +від бази даних, не втрачая доступності бази. + +Ми розуміємо, що консистентність + + In this chapter we make attempt to reach compromise and ensure or increase consistency value for any distributed datastore without losing availability and partition tolerance. +We would like to introduce the idea first and then estimate its impact availability and partition tolerance. + +So let us go deeper into a problem. + +Imagine we have a distributed datastore that has N nodes. We do not take into account for now role of each node +(master or slave) and assume that each node can accept read and write requests. Now we focus on the mechanism +of database request accepting and processing. If one of nodes accepted write request, we claim that the +datastore system will reach fast enough of consistency value to maintain consistent response. + +What if to try to get round this problem by handling request to database by the list of consistent nodes for. appropriate to the dataunit incoming in the request. +We want to estimate how it may impact availability and partition tolerance if we want to +get round consistency issue this way. + +There are several solutions. But they all have general architecture: +(Picture of architecture) + +\end{document} \ No newline at end of file diff --git "a/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/Ukrainian paper/phd.toc" "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/Ukrainian paper/phd.toc" new file mode 100644 index 0000000..f33316c --- /dev/null +++ "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/Ukrainian paper/phd.toc" @@ -0,0 +1,6 @@ +\babel@toc {ukrainian}{} +\contentsline {chapter}{\IeC {\CYRV }\IeC {\cyrs }\IeC {\cyrt }\IeC {\cyru }\IeC {\cyrp }}{3}{chapter*.1} +\contentsline {paragraph}{\bfseries \IeC {\CYRA }\IeC {\cyrk }\IeC {\cyrt }\IeC {\cyru }\IeC {\cyra }\IeC {\cyrl }\IeC {\cyrsftsn }\IeC {\cyrn }\IeC {\cyrii }\IeC {\cyrs }\IeC {\cyrt }\IeC {\cyrsftsn } \IeC {\cyrt }\IeC {\cyre }\IeC {\cyrm }\IeC {\cyri }.}{3}{section*.2} +\contentsline {paragraph}{\bfseries \IeC {\CYRV }\IeC {\cyrz }\IeC {\cyra }\IeC {\cyrie }\IeC {\cyrm }\IeC {\cyro }\IeC {\cyrz }\IeC {\cyrv }'\IeC {\cyrya }\IeC {\cyrz }\IeC {\cyro }\IeC {\cyrk } \IeC {\cyrr }\IeC {\cyro }\IeC {\cyrb }\IeC {\cyro }\IeC {\cyrt }\IeC {\cyri } \IeC {\cyrz } \IeC {\cyrn }\IeC {\cyra }\IeC {\cyru }\IeC {\cyrk }\IeC {\cyro }\IeC {\cyrv }\IeC {\cyri }\IeC {\cyrm }\IeC {\cyri } \IeC {\cyrp }\IeC {\cyrr }\IeC {\cyro }\IeC {\cyrg }\IeC {\cyrr }\IeC {\cyra }\IeC {\cyrm }\IeC {\cyra }\IeC {\cyrm }\IeC {\cyri }, \IeC {\cyrp }\IeC {\cyrl }\IeC {\cyra }\IeC {\cyrn }\IeC {\cyra }\IeC {\cyrm }\IeC {\cyri }, \IeC {\cyrt }\IeC {\cyre }\IeC {\cyrm }\IeC {\cyra }\IeC {\cyrm }\IeC {\cyri }.}{3}{section*.3} +\contentsline {paragraph}{\bfseries \IeC {\CYRM }\IeC {\cyre }\IeC {\cyrt }\IeC {\cyra } \IeC {\cyrii } \IeC {\cyrz }\IeC {\cyra }\IeC {\cyrv }\IeC {\cyrd }\IeC {\cyra }\IeC {\cyrn }\IeC {\cyrn }\IeC {\cyrya } \IeC {\cyrd }\IeC {\cyro }\IeC {\cyrs }\IeC {\cyrl }\IeC {\cyrii }\IeC {\cyrd }\IeC {\cyrzh }\IeC {\cyre }\IeC {\cyrn }\IeC {\cyrn }\IeC {\cyrya }.}{4}{section*.4} +\contentsline {chapter}{\numberline {{\cyrillictext \CYRR \cyro \cyrz \cyrd \cyrii \cyrl }\nobreakspace 1}\IeC {\CYRB }\IeC {\cyra }\IeC {\cyrl }\IeC {\cyra }\IeC {\cyrn }\IeC {\cyrs }\IeC {\cyru }\IeC {\cyrv }\IeC {\cyra }\IeC {\cyrn }\IeC {\cyrn }\IeC {\cyrya } \IeC {\cyru }\IeC {\cyrz }\IeC {\cyrg }\IeC {\cyro }\IeC {\cyrd }\IeC {\cyrzh }\IeC {\cyre }\IeC {\cyrn }\IeC {\cyro }\IeC {\cyrs }\IeC {\cyrt }\IeC {\cyrii }}{5}{chapter.1} diff --git "a/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/Ukrainian paper/speciality.20070212N70" "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/Ukrainian paper/speciality.20070212N70" new file mode 100644 index 0000000..d1894c1 --- /dev/null +++ "b/papers/\320\232\320\260\320\275\320\264\320\270\320\264\320\260\321\202\321\201\320\272\320\260\321\217/Ukrainian paper/speciality.20070212N70" @@ -0,0 +1,690 @@ +%% +%% This is file `speciality.20070212N70', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% vakthesis.dtx (with options: `speciality') +%% +%% IMPORTANT NOTICE: +%% +%% For the copyright see the source file. +%% +%% Any modified versions of this file must be renamed +%% with new filenames distinct from speciality.20070212N70. +%% +%% For distribution of the original source see the terms +%% for copying and modification in the file vakthesis.dtx. +%% +%% This generated file may be distributed as long as the +%% original source files, as listed above, are part of the +%% same distribution. (The sources need not necessarily be +%% in the same archive or directory.) +% speciality.20070212N70 +% +% 12.02.2007 70 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% , +% , +% +% +% << ...>> +% 23.06.2005 377 +% , +% 14.02.2006 73, +% 29.05.2006 263, +% 19.09.2006 407, +% 12.02.2007 70 +% ̳ +% 05.07.2005 713/10993, +% 06.03.2006 236/12110, +% 07.06.2006 682/12556, +% 27.09.2006 1075/12949, +% 21.02.2007 159/13426 +% +% +% http://www.vak.org.ua/docs//spec_boards/spec_list.pdf +% ( 12.07.2007) +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% : +% * +% ## +% * +% ##.## +% * +% ##.##.## / +% ! +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +01 - +% +01.01 +01.01.01 /- +01.01.02 /- +01.01.03 /- +01.01.04 /- +01.01.05 /- +01.01.06 /- +01.01.07 /- +01.01.08 , /- +01.01.09 /- +01.01.10 /- +% +01.02 +01.02.01 /- +01.02.04 /- / +01.02.05 , /- / +% +01.03 +01.03.01 /- +01.03.02 i, ii/- +01.03.03 /- +% +01.04 +01.04.01 , /- +01.04.02 /- +01.04.03 /- +01.04.04 /- +01.04.05 , /- +01.04.06 /- +01.04.07 /- / +01.04.08 /- / +01.04.09 /- +01.04.10 /- +01.04.11 /- +01.04.13 /- +01.04.14 /- +01.04.15 /- +01.04.16 , /- / +01.04.17 , /- / +01.04.18 /- / +01.04.19 /- +01.04.20 /- / +01.04.21 /- +01.04.22 /- +01.04.24 /- +% +01.05 +01.05.01 /- +01.05.02 /- / +01.05.03 /- / +01.05.04 /- / +% +01.06 - +01.06.01 - /- +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +02 +02.00.01 / +02.00.02 / +02.00.03 / +02.00.04 / +02.00.05 / +02.00.06 / +02.00.08 / +02.00.09 / +02.00.10 / / +02.00.11 / +02.00.13 / +02.00.15 / +02.00.19 / +02.00.21 / +02.00.22 쳿/ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +03 +03.00.01 / / +03.00.02 / /- / +03.00.03 / +03.00.04 / / / / +03.00.05 / +03.00.06 / / +03.00.07 / / / +03.00.08 / +03.00.09 / +03.00.10 / +03.00.11 , , / +03.00.12 / / +03.00.13 / / / +03.00.14 / / +03.00.15 / / / +03.00.16 / / / +03.00.17 / +03.00.18 / +03.00.19 / +03.00.20 / / / +03.00.21 / / +03.00.22 / +03.00.23 㳿/ +03.00.24 / +03.00.25 , / +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +04 +04.00.01 / +04.00.02 / / +04.00.04 / +04.00.05 / /- +04.00.06 / +04.00.07 / +04.00.08 / +04.00.09 / +04.00.10 / +04.00.11 / / +04.00.16 / +04.00.17 / +04.00.19 / / +04.00.20 , / +04.00.21 / +04.00.22 / /- +04.00.23 㳿/ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +05 +% +05.01 , +05.01.01 , / +05.01.02 , / +05.01.03 / / +05.01.04 / / / +% +05.02 +05.02.01 / +05.02.02 / +05.02.04 / +05.02.08 / +05.02.09 / +05.02.10 / +% +05.03 +05.03.01 , / +05.03.05 / +05.03.06 㳿/ +05.03.07 - / +% +05.05 +05.05.01 / +05.05.02 / +05.05.03 / +05.05.04 , / +05.05.05 - / +05.05.06 / +05.05.08 / +05.05.10 / +05.05.11 / +05.05.12 / +05.05.13 / +05.05.14 , , / +05.05.16 / +05.05.17 / +% +05.07 - +05.07.01 / +05.07.02 , / +05.07.06 , / +05.07.12 / /- / +05.07.14 - / +% +05.08 +05.08.01 / +05.08.03 / +% +05.09 +05.09.01 / +05.09.03 / +05.09.05 / +05.09.07 / +05.09.08 / +05.09.12 㳿/ +05.09.13 / +% +05.11 +05.11.01 / +05.11.03 / +05.11.04 / +05.11.05 / +05.11.07 / +05.11.08 / +05.11.13 / +05.11.17 / +% +05.12 +05.12.02 / +05.12.07 / +05.12.13 / +05.12.17 / +05.12.20 / +% +05.13 , +05.13.03 / +05.13.05 ' / +05.13.06 㳿/ +05.13.07 / +05.13.09 / +05.13.12 / +05.13.21 / +05.13.22 / +05.13.23 / +% +05.14 +05.14.01 / +05.14.02 , / +05.14.06 / +05.14.08 㳿/ +05.14.14 / +% +05.15 +05.15.01 / +05.15.02 / +05.15.03 / +05.15.04 / +05.15.06 / +05.15.08 / +05.15.09 / +05.15.12 / +05.15.13 , / +% +05.16 +05.16.01 / +05.16.02 / +05.16.04 / +05.16.06 / +% +05.17 㳿 +05.17.01 / +05.17.03 / +05.17.04 / +05.17.06 / +05.17.07 - / +05.17.08 㳿/ +05.17.11 / +05.17.14 糿/ +05.17.15 / +05.17.18 / +05.17.21 / +% +05.18 +05.18.01 , / +05.18.05 / +05.18.06 , - / +05.18.12 , / +05.18.13 / +05.08.15 / +05.18.16 / +05.18.18 , / +05.18.19 , / +% +05.22 +05.22.01 / +05.22.02 / +05.22.06 / +05.22.07 / +05.22.09 / +05.22.11 / +05.22.12 / +05.22.13 / +05.22.20 / +% +05.23 +05.23.01 , / +05.23.02 / +05.23.03 , / +05.23.04 , / +05.23.05 / +05.23.08 / +05.23.16 / +05.23.17 / +05.23.20 / +% +05.24 +05.24.01 / +05.24.04 / / +% +05.26 +05.26.01 / +% +05.27 +05.27.01 / +05.27.02 , / +05.27.06 , / +% +05.28 +05.28.01 / +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +06 +% +06.01 +06.01.01 / +06.01.02 / / +06.01.03 / +06.01.04 / +06.01.05 / +06.01.06 / +06.01.07 / +06.01.08 / +06.01.09 / +06.01.10 / +06.01.11 / / +06.01.12 / +06.01.13 / +06.01.14 / +06.01.15 / +% +06.02 +06.02.01 / / +06.02.02 / +06.02.03 / +06.02.04 / +% +06.03 +06.03.01 / / +06.03.02 / +06.03.03 / / +% +06.04 +06.04.01 / +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +07 +07.00.01 / +07.00.02 / +07.00.03 / +07.00.04 / +07.00.05 / +07.00.06 , / +07.00.07 / +07.00.08 , , / / +07.00.09 / +07.00.10 , / +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +08 +08.00.01 / +08.00.02 / +08.00.03 / +08.00.04 ( )/ +% , ( \speciality) +08.00.05 / +08.00.06 / +08.00.07 , , / +08.00.08 , / +08.00.09 , ( )/ +% , ( \speciality) +08.00.10 / +08.00.11 , 㳿 / +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +09 +09.00.01 , , / +09.00.02 / +09.00.03 / / +09.00.04 , / +09.00.05 / / +09.00.06 / +09.00.07 / / / +09.00.08 / / / +09.00.09 / +09.00.10 / +09.00.11 㳺/ / / +09.00.12 / / +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +10 +% +10.01 +10.01.01 / +10.01.02 / +10.01.03 ' / +10.01.04 / +10.01.05 / +10.01.06 / +10.01.07 / / +10.01.08 / +10.01.09 / +10.01.10 / +% +10.02 +10.02.01 / +10.02.02 / +10.02.03 ' / +10.02.04 / +10.02.05 / +10.02.06 / +10.02.07 / +10.02.08 / +10.02.09 - / +10.02.10 - / +10.02.11 / +10.02.12 / +10.02.13 糿, , 볿/ +10.02.14 ; / +% +10.02.15 / +10.02.16 / +10.02.17 - / +10.02.21 , / +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +11 +11.00.01 , / +11.00.02 / +11.00.04 / +11.00.05 / +11.00.07 , , / +11.00.08 / +11.00.09 , , / +11.00.11 / +11.00.12 / +11.00.13 / +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +12 +12.00.01 ; / +12.00.02 / +12.00.03 ; ; / +12.00.04 , - / +12.00.05 ; / +12.00.06 ; ; ; / +12.00.07 ; ; / +12.00.08 ; - / +12.00.09 ; / +12.00.10 ; / +12.00.11 / +12.00.12 / / +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +13 +% +13.00.01 / +13.00.02 ( )/ +% : , ( \speciality) +13.00.03 / +13.00.04 / +13.00.05 / +13.00.06 / +13.00.07 / +13.00.08 / +13.00.09 / +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +14 +% +14.01 +14.01.01 / +14.01.02 / +14.01.03 / +14.01.04 / +14.01.05 / +14.01.06 / +14.01.07 / / +14.01.08 / / +14.01.09 / +14.01.10 / +14.01.11 / +14.01.12 / +14.01.13 / +14.01.14 / / +14.01.15 / +14.01.16 / +14.01.17 / +14.01.18 / +14.01.19 / +14.01.20 / +14.01.21 / +14.01.22 / +14.01.23 / +14.01.24 / +14.01.25 / +14.01.26 / +14.01.27 / +14.01.28 / +14.01.29 / +14.01.30 / +14.01.31 / / +14.01.32 / / +14.01.33 , / +14.01.34 / +14.01.35 / +14.01.36 / +14.01.37 / +% +14.02 +14.02.01 㳺/ / +14.02.02 / +14.02.03 / +14.02.04 / +% +14.03 +14.03.01 / / +14.03.02 / +14.03.03 / +14.03.04 / / +14.03.05 / / / +14.03.06 / / +14.03.07 / / +14.03.08 / +14.03.09 , , / +14.03.10 / / +14.03.11 / / +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +15 +15.00.01 / +15.00.02 / +15.00.03 / +15.00.04 / +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +16 +16.00.01 / +16.00.02 , / +16.00.03 / +16.00.04 / +16.00.05 / +16.00.06 㳺 / / +16.00.07 / +16.00.08 / +16.00.09 - / +16.00.10 / / +16.00.11 , / / +16.00.12 / +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +17 +17.00.01 // / +17.00.02 / +17.00.03 / +17.00.04 ; / +% +17.00.05 / +17.00.06 / +17.00.08 ; '// +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +18 +18.00.01 , ' / +18.00.02 / +18.00.04 / +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +19 +19.00.01 , 㳿/ +19.00.02 / +19.00.03 ; / / +19.00.04 / / +19.00.05 ; / +19.00.06 / / +19.00.07 / +19.00.08 / +19.00.09 / +19.00.10 ; / +19.00.11 / +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +20 +% +20.01 - +20.01.01 / +20.01.05 / / / +20.01.07 / / +20.01.08 / / / +20.01.10 쳿/ +20.01.12 , / / +% +20.02 - +20.02.04 / /- / / +20.02.05 / / +20.02.11 / +20.02.12 , '/ +20.02.14 / +20.02.15 , / +20.02.20 / /- +20.02.22 / / +20.02.23 / / / / / / +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +21 +% +21.01 +21.01.01 / / +% +21.02 +21.02.01 / / +21.02.02 / / +21.02.03 / / / / / / +% +21.03 +21.03.01 / / +21.03.02 / +21.03.03 / / +% +21.04 +21.04.01 / / +21.04.02 ' / +% +21.05 +21.05.01 / +% +21.06 +21.06.01 / / / / +21.06.02 / +% +21.07 +21.07.01 / / +21.07.02 /- / / / / / / +21.07.03 / / / +21.07.04 - / / +21.07.05 - / / / / +% +21.08 +21.08.01 / / / / +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +22 +22.00.01 㳿/ +22.00.02 / +22.00.03 / +22.00.04 㳿/ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +23 +23.00.01 / / +23.00.02 / / +23.00.03 / +23.00.04 / +23.00.05 / +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +24 +24.00.01 / +24.00.02 , / +24.00.03 / +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +25 +25.00.01 / +25.00.02 / +25.00.03 / +25.00.04 / +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +26 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +27 diff --git a/results/(1, 1, 1, 1, 1)-max-consistent-partitions-probability-5-nodes-a09031b4283547c49d2146f1977a37b1.png b/results/(1, 1, 1, 1, 1)-max-consistent-partitions-probability-5-nodes-a09031b4283547c49d2146f1977a37b1.png new file mode 100644 index 0000000..91b38a9 Binary files /dev/null and b/results/(1, 1, 1, 1, 1)-max-consistent-partitions-probability-5-nodes-a09031b4283547c49d2146f1977a37b1.png differ diff --git a/results/(1, 1, 1, 2)-max-consistent-partitions-probability-5-nodes-7b54eddb588c4b4b9ecc9b54b2b2d595.png b/results/(1, 1, 1, 2)-max-consistent-partitions-probability-5-nodes-7b54eddb588c4b4b9ecc9b54b2b2d595.png new file mode 100644 index 0000000..b27c0b0 Binary files /dev/null and b/results/(1, 1, 1, 2)-max-consistent-partitions-probability-5-nodes-7b54eddb588c4b4b9ecc9b54b2b2d595.png differ diff --git a/results/(1, 1, 3)-max-consistent-partitions-probability-5-nodes-e10ba0b330c34d7498ddd29dd0c79bfd.png b/results/(1, 1, 3)-max-consistent-partitions-probability-5-nodes-e10ba0b330c34d7498ddd29dd0c79bfd.png new file mode 100644 index 0000000..8965454 Binary files /dev/null and b/results/(1, 1, 3)-max-consistent-partitions-probability-5-nodes-e10ba0b330c34d7498ddd29dd0c79bfd.png differ diff --git a/results/(1, 2, 2)-max-consistent-partitions-probability-5-nodes-bbc08cc6dbf247c585b7bf281bb93b59.png b/results/(1, 2, 2)-max-consistent-partitions-probability-5-nodes-bbc08cc6dbf247c585b7bf281bb93b59.png new file mode 100644 index 0000000..18b5a23 Binary files /dev/null and b/results/(1, 2, 2)-max-consistent-partitions-probability-5-nodes-bbc08cc6dbf247c585b7bf281bb93b59.png differ diff --git a/results/(1, 4)-max-consistent-partitions-probability-5-nodes-a225effe3dc44f12b4ab06b444908280.png b/results/(1, 4)-max-consistent-partitions-probability-5-nodes-a225effe3dc44f12b4ab06b444908280.png new file mode 100644 index 0000000..78fdd08 Binary files /dev/null and b/results/(1, 4)-max-consistent-partitions-probability-5-nodes-a225effe3dc44f12b4ab06b444908280.png differ diff --git a/results/(2, 3)-max-consistent-partitions-probability-5-nodes-ed1f00b801bd42c8a7ccc5330ad1c19a.png b/results/(2, 3)-max-consistent-partitions-probability-5-nodes-ed1f00b801bd42c8a7ccc5330ad1c19a.png new file mode 100644 index 0000000..02593b0 Binary files /dev/null and b/results/(2, 3)-max-consistent-partitions-probability-5-nodes-ed1f00b801bd42c8a7ccc5330ad1c19a.png differ diff --git a/results/(5,)-max-consistent-partitions-probability-5-nodes-f2e7c2370286417a85b9052cd373a1c1.png b/results/(5,)-max-consistent-partitions-probability-5-nodes-f2e7c2370286417a85b9052cd373a1c1.png new file mode 100644 index 0000000..aa8bc4f Binary files /dev/null and b/results/(5,)-max-consistent-partitions-probability-5-nodes-f2e7c2370286417a85b9052cd373a1c1.png differ diff --git a/results/100-consistency-convergence-weighted.png b/results/100-consistency-convergence-weighted.png new file mode 100644 index 0000000..b7cef03 Binary files /dev/null and b/results/100-consistency-convergence-weighted.png differ diff --git a/results/1000-consistency-convergence-weighted.png b/results/1000-consistency-convergence-weighted.png new file mode 100644 index 0000000..aad9f4a Binary files /dev/null and b/results/1000-consistency-convergence-weighted.png differ diff --git a/results/1000-consistency-convergence.png b/results/1000-consistency-convergence.png new file mode 100644 index 0000000..8587241 Binary files /dev/null and b/results/1000-consistency-convergence.png differ diff --git a/results/200-consistency-convergence-weighted.png b/results/200-consistency-convergence-weighted.png new file mode 100644 index 0000000..fd70c86 Binary files /dev/null and b/results/200-consistency-convergence-weighted.png differ diff --git a/results/200-consistency-convergence.png b/results/200-consistency-convergence.png new file mode 100644 index 0000000..3ac6a59 Binary files /dev/null and b/results/200-consistency-convergence.png differ