Matching Items (4)
Filtering by

Clear all filters

135230-Thumbnail Image.png
Description
Agent Based modeling has been used in computer science to simulate complex phenomena. The introduction of Agent Based Models into the field of economics (Agent Based Computational Economics ACE) is not new, however work on making model environments simpler to design for individuals without a background in computer science or

Agent Based modeling has been used in computer science to simulate complex phenomena. The introduction of Agent Based Models into the field of economics (Agent Based Computational Economics ACE) is not new, however work on making model environments simpler to design for individuals without a background in computer science or computer engineering is a constantly evolving topic. The issue is a trade off of how much is handled by the framework and how much control the modeler has, as well as what tools exist to allow the user to develop insights from the behavior of the model. The solutions looked at in this thesis are the construction of a simplified grammar for model construction, the design of an economic based library to assist in ACE modeling, and examples of how to construct interactive models.
ContributorsAnderson, Brandon David (Author) / Bazzi, Rida (Thesis director) / Kuminoff, Nicolai (Committee member) / Roberts, Nancy (Committee member) / Computer Science and Engineering Program (Contributor) / Economics Program in CLAS (Contributor) / Barrett, The Honors College (Contributor)
Created2016-05
134339-Thumbnail Image.png
Description
Implementing a distributed algorithm is more complicated than implementing a non-distributed algorithm. This is because distributed systems involve coordination of different processes each of which has a partial view of the global system state. The only way to share information in a distributed system is by message passing. Task that

Implementing a distributed algorithm is more complicated than implementing a non-distributed algorithm. This is because distributed systems involve coordination of different processes each of which has a partial view of the global system state. The only way to share information in a distributed system is by message passing. Task that are straightforward in a non-distributed system, like deciding on the value of a global system state, can be quite complicated to achieve in a distributed system [1]. On top of the difficulties caused by the distributed nature of the computations, distributed systems typically need to be able to operate normally even if some of the nodes in the system are faulty which further adds to the uncertainty that processes have about the global state. Many factors make the implementation of a distributed algorithms difficult. Design patterns [2] are useful in simplifying the development of general algorithms. A design pattern describes a high level solution to a common, abstract problem that many systems may face. Common structural, creational, and behavioral problems are identified and elegantly solved by design patterns. By identifying features that an algorithm uses, and framing each feature as one of the common problems that a specific design pattern solves, designing a robust implementation of an algorithm becomes more manageable. In this way, design patterns can aid the implementation of algorithms. Unfortunately, design patterns are typically not discussed when developing distributed algorithms. Because correctly developing a distributed algorithm is difficult, many papers (eg. [1], [3], [4]) focus on verifying the correctness of the developed algorithm. Papers that are more practical ([5], [6]) establish the correctness of their algorithm and that their algorithm is efficient enough to be practical. However, papers on distributed algorithms usually make little mention of design patterns. The goal of this work was to gain experience implementing distributed systems including learning the application of design patterns and the application of related technical topics. This was achieved by implementing a currently unpublished algorithm that is tentatively called Bakery Consensus. Bakery Consensus is a replicated state-machine protocol that can tolerate servers with Byzantine faults, but assumes non-faulty clients. The algorithm also establishes non-skipping timestamps for each operation completed by the replicated state-machine. The design of the structure, communication, and creation of the different system parts depended heavily upon the book Design Patterns [2]. After implementing the system, the success of the in implementing its various parts was based upon their ability to satisfy the SOLID [7] principles as well as their ability to establish low coupling and high cohesion [8]. The rest of this paper is organized as follows. We begin by providing background information about distributed algorithms, including replicated state-machine protocols and the Bakery Consensus algorithm. Section 3 gives a background on several design patterns and software engineering principles that were used in the development process. Section 4 discusses the well designed parts of the system that used design patterns, and how these design patterns were chosen. Section 5 discusses well designed system parts that relied upon other technical topics. Section 6 discusses system parts that need redesign. The conclusion summarizes what was accomplished by the implementation process and the lessons learned about design patterns for distributed algorithms.
ContributorsStoutenburg, Tristan Kaleb (Author) / Bazzi, Rida (Thesis director) / Richa, Andrea (Committee member) / Computer Science and Engineering Program (Contributor) / Barrett, The Honors College (Contributor)
Created2017-05
135148-Thumbnail Image.png
Description
\English is a programming language, a method of allowing programmers to write instructions such that a computer may understand and execute said instructions in the form of a program. Though many programming languages exist, this particular language is designed for ease of development and heavy optimizability in ways that no

\English is a programming language, a method of allowing programmers to write instructions such that a computer may understand and execute said instructions in the form of a program. Though many programming languages exist, this particular language is designed for ease of development and heavy optimizability in ways that no other programming language is. Building on the principles of Assembly level efficiency, referential integrity, and high order functionality, this language is able to produce extremely efficient code; meanwhile, programmatically defined English-based reusable syntax and a strong, static type system make \English easier to read and write than many existing programming languages. Its generalization of all language structures and components to operators leaves the language syntax open to project-specific syntactical structuring, making it more easily applicable in more cases. The thesis project requirements came in three parts: a compiler to compile \English code into NASM Assembly to produce a final program product; a standard library to define many of the basic operations of the language, including the creation of lists; and C translation library that would utilize \English properties to compile C code using the \English compiler. Though designed and partially coded, the compiler remains incomplete. The standard library, C translation library, and design of the language were completed. Additional tools regarding the language design and implementation were also created, including a Gedit syntax highlighting configuration file; usage documentation describing in a tutorial style the basic usage of the language; and more. Though the thesis project itself may be complete, the \English project will continue in order to produce a new language capable of the abilities possible with the design of this language.
ContributorsDavey, Connor (Author) / Gupta, Sandeep (Thesis director) / Bazzi, Rida (Committee member) / Calliss, Debra (Committee member) / Barrett, The Honors College (Contributor)
Created2016-05
131123-Thumbnail Image.png
Description
Gamification is used to provide an entertaining alternative to educate an individual on a topic that has proven to be difficult, confusing, or undesirable. This thesis describes the design of a video game whose goal was to provide a way for coders and non-coders to educate themselves on programming scopes

Gamification is used to provide an entertaining alternative to educate an individual on a topic that has proven to be difficult, confusing, or undesirable. This thesis describes the design of a video game whose goal was to provide a way for coders and non-coders to educate themselves on programming scopes while also being entertained in the process. Reaching the goal required using the puzzle genre to create a concept where programming scopes would serve as the primary mechanic while also using various other programming concepts to complement it. These concepts include variables, values, functions, programming statements, and conditions.
In order to ensure that the game worked both as an educational tool as well as an entertaining one, informal testers were used with various degrees of experience in both coding and video games. After reaching the end of the game, each of the testers demonstrated that they understood the programming concepts in their video game form. However, this understanding came after additional verbal help was supplied and illustrated that the tutorial section of the game would need to be re-worked in order to efficiently demonstrate each concept.
ContributorsLucero, Elijah Ray (Author) / Bazzi, Rida (Thesis director) / Selgrad, Justin (Committee member) / Computer Science and Engineering Program (Contributor) / Barrett, The Honors College (Contributor)
Created2020-05