Giter Club home page Giter Club logo

snc's Introduction

NetworkCalculus.org SNC

The Stochastic Network Calculator is a Java tool for the stochastic worst case performance analysis of networks. It was derived from the DiscoSNC. More detailed descriptions can be found on the project's previous webpage at DISCO and in the technical report on ArXiv.

Note that this software is still under development. We appreciate any contribution, feel free to fork the project, post bugs and of course post pull requests, too.

Getting Started with Development

We provide the SNC as a Maven project. All dependencies (JUNG Java Graph Framework and Apache Commons Math Library) and their transitive dependencies are resolved by Maven, i.e., they are pulled from the Maven Central Repository.

The SNC can be built with a Java 10 JDK. It was tested with Oracle's Java HotSpot(TM) 64-Bit Server VM.

Running the SNC

The SNC comes with a graphical user interface. Therefore, Maven is configured to build executable jar files of the project:

  • SNC-${version}-jar-with-dependencies.jar that bundles all dependencies, and
  • SNC-${version}.jar that assumes dependencies are in a lib/ folder next to it.

The current ${version} can be found in Maven's configuration file.

In order to execute the jar-file, locate it in your output folder, open a command line window and enter

java -jar SNC-${version}-jar-with-dependencies.jar

(Don't forget to replace ${version} with the one you located in pom.xml).

Academic Attribution

If you use the Stochastic Network Calculator for research, please include at least one of the following reference in any resulting publication:

@inproceedings{DiscoSNCv1,
  author    = {Michael A. Beck and Jens B. Schmitt},
  title     = {The {DISCO} Stochastic Network Calculator Version 1.0 -- When Waiting Comes to an End},
  booktitle = {Proc. of the International Conference on Performance Evaluation Methodologies and Tools},
  series    = {ValueTools '13},
  pages     = {282--285},
  month     = {December},
  year      = 2013,
  url       = {https://dl.acm.org/citation.cfm?id=2631878}
}
@article{SNCv2,
  author    = {Michael A. Beck and Sebastian A. Henningsen},
  title     = {Technical Report The Stochastic Network Calculator},
  journal   = {CoRR},
  volume    = {abs/1707.07739},
  year      = {2017},
  url       = {http://arxiv.org/abs/1707.07739},
}

snc's People

Contributors

jerous86 avatar mbeck85 avatar netcal avatar sbondorf avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

jerous86

snc's Issues

Switchable Number Backend Implementation (DiscoDNC Code Sharing)

The DiscoSNC currently offers NumberObj and NumberObjType, a class and an enum, to switch the tool's number backend. This functionality does not seem to be used, see comment FIXME Implement a global flag in Analysis.java (?) and read that out. in line 28 of NumberObj. I assume the provided code is thus not tested either (?).

The DiscoDNC offers a switchable number backend, too. This backend provides wrappers for primitive single and double precision floating point numbers as well as rationals based on Integer or BigInteger (with additional classes to add +/-infinity and NaN to those). Since commit NetCal/DNC@88dd059 it is entirely independent of the DiscoDNC. It can be packaged separately and used as a library (the plan is to move it into its own project eventually). Moreover, this number backend is tested by the DiscoDNC functional tests.

Thus, I suggest to remove NumberObj and NumberObjType in favor of code sharing with the DiscoDNC. Currently, this task does not seem to cause a big porting effort.
Comments like the one above should be added to the locations in the code that require adaptation for the switchable number backend.

Commands take a networkID but always call snc.getCurrentNetwork()

Commands' constructors in de.uni_kl.cs.disco.snc.calculator.commands take the networkID and store them in a member variable. However, when calling execute(), the SNC's current network is queried with snc.getCurrentNetwork().

An exception is EndToEndConvolutionCommand. It gets the current network in its constructor and stores it in a member variable. It doesn't even store the given network ID at all and in turn the stored SNC variable is never used.

Application does not start

Neither the snc.jar to download nor a newly build one starts on my system (macOS 10.13.6, Oracle Java 10). The Java icon appears for a short time but disappears again. No GUI is shown, as if the application crashed.

Further testing shows:

  • Using a Java 8 JRE, I can start the snc.jar that can be downloaded. But the left panel is too small and cannot be enlarged.
  • Compiling with Maven compiler.source and compiler.target 1.8 does not start with a JRE 8.

Bug in ScaledFunction.java (!?)

in the method public double getValue(double theta, Map<Integer, Hoelder> parameters) there are checks for original.getParameters().containsKey(hoelder).

original is an object of SymbolicFunction and getParameters() returns Map<Integer, Hoelder>, i.e., keys are Integer objects.

Should the code test containsValue(hoelder)?

FB: Return value of method without side effect is ignored

In SimpleOptimizer.java, method public double minimize(...) there is this loop:

while(theta < maxTheta) {
	try {
		Math.min(optValue, bound.evaluate(theta));
		theta = theta+thetagranularity;
	} catch(ServerOverloadException | ThetaOutOfBoundException e) {
		theta = theta+thetagranularity;
	}
}

and Spotbugs rightfully complains that the result of Math.min is not used.
Note, that bound.evaluate(theta) cannot change theta as it is an immutable double.

Moreover, above this problematic loop, we find similar loops. For example:

while(theta < maxTheta) {
	try {
		optValue = Math.min(optValue, bound.evaluate(theta));
		theta = theta+thetagranularity;
	} catch(ServerOverloadException | ThetaOutOfBoundException e) {
		theta = theta+thetagranularity;
	}
}

They all assign optValue = . Is that assignment missing in the problematic loop?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.