It is common to listen to songs that match one's mood. Thus, an AI music recommendation system that is aware of the user's emotions is likely to provide a superior user experience to one that is unaware. In this paper, we present an emotion-aware music recommendation system. Multiple models are discussed and evaluated for affect identification from a live image of the user. We propose two models: DRViT, which applies dynamic routing to vision transformers, and InvNet50, which uses involution. All considered models are trained and evaluated on the AffectNet dataset. Each model outputs the user's estimated valence and arousal under the circumplex model of affect. These values are compared to the valence and arousal values for songs in a Spotify dataset, and the top-five closest-matching songs are presented to the user. Experimental results of the models and user testing are presented.
This work considers the use of AI and parallelism as a context for learning typical programming concepts in an introductory programming course (CS1). The course includes exercises in decision trees, a novel game called Find the Gnomes to introduce supervised learning, the construction and application of a vectorized neural network unit class, and obtaining speedup in training through parallelism. The exercises are designed to teach students typical introductory programming concepts while also providing a preview and motivating example of advanced CS topics. Students' understanding and motivation are considered through a detailed analysis of pre- and post-survey data gathered in several sections of the course each taught by one of four instructors across five semesters.
This paper describes the design and training of a computer Gin Rummy player. The system includes three main components to make decisions about drawing cards, discarding, and ending the game, with numerous parameters controlling behavior. In particular, an ensemble approach is explored in the discard decision. Finally, three sets of parameter tuning and performance experiments are analyzed.
Birds of a Feather is a single-player card game in which cards are arranged in a grid. The player attempts to combine stacks of cards under certain rules, with the goal being to combine all cards into a single stack. This paper highlights several approaches for efficiently classifying whether a randomly-chosen state has a single-stack solution. These approaches use graph theory and machine learning concepts to prune a state's search space, resulting in significant reductions in runtime relative to a baseline search.
Peachy Parallel assignments are high-quality assign- ments for teaching parallel and distributed computing. They have been successfully used in class and are selected on the basis of their suitability for adoption and for being cool and inspirational for students. Here we present a fire fighting simulation, thread- to-core mapping on NUMA nodes, introductory cloud computing, interesting variations on prefix-sum, searching for a lost PIN, and Big Data analytics.
By introducing parallelism in introductory programming courses, all computer science students can receive a basic understanding of this crucial topic. Such an early introduction, however, has many challenges. This paper first presents a fall 2013 comparison of two Computer Science I (CS1) sections, leading to a conclusion emphasizing the importance of devoting sufficient time to a sufficiently small set of parallelism topics. Six additional CS1 sections are then considered, offered from spring 2014 through spring 2016 by three different instructors. Five of these removed coverage of Java thread programming due to challenges found in fall 2013, only to show measurably reduced effectiveness of the parallelism module. Thus a new thread programming integration strategy is presented, as done in spring 2016. This strategy includes active out-of-class activities that split the disparate challenges of Java thread programming into distinct exercises. Results demonstrate improved student interest and learning.
Poker Squares is a single-player card game played on a 5 x 5 grid, in which a player attempts to create as many high scoring Poker hands as possible. As a stochastic single-player game with an extremely large state space, this game offers an interesting area of application for Monte-Carlo Tree Search (MCTS). This paper describes enhancements made to the MCTS algorithm to improve computer play, including pruning in the selection stage and a greedy simulation algorithm. These enhancements make extensive use of domain knowledge in the form of a state evaluation heuristic. Experimental results demonstrate both the general efficacy of these enhancements and their ideal parameter settings.
Parameterized Poker Squares (PPS) is a generalization of Poker Squares where players must adapt to a point system supplied at play time and thus dynamically compute highly-varied strategies. Herein, we detail the top three performing AI players in a PPS research competition, all three of which make various use of Monte Carlo techniques.
As a lightweight high-level language that supports both functional and object-oriented programming, Python provides many tools to allow programmers to easily express their ideas. This expressiveness extends to programming using parallelism and concurrency, allowing the early introduction of these increasingly critical concepts in the computer science core curriculum. Intended for instructors, this chapter provides pedagogical content on parallel programming in Python, including numerous illustrative examples and advice on presentation and evaluation.
There is much discussion in the computer science education community today about how to integrate more parallel and distributed computing (PDC) into the undergraduate curriculum. This discussion occurs for good reason, as the importance of PDC will likely continue to grow. One less-discussed challenge is how to introduce these topics in a level-appropriate way to students in the lowest-level courses: early CS1, CS0, and even computer literacy. It is important to consider this for two reasons: (1) such early exploration inculcates an attitude of ordinariness of PDC in line with the new reality of the discipline, and (2) students who do not choose to take further courses in computer science will still gain exposure to PDC. This chapter describes a hands-on way to explore PDC concepts with no prerequisites and little time using the Scratch programming language. Some background is provided on Scratch and the context of application of this work, as is a description of several exercises to explore these concepts and advice on their application.
With the growing recognition of the importance of parallel and distributed computing (PDC) in computer science, it is crucial to offer students early experience -- even in CS1. At the same time, PDC material must be handled very carefully when presented to students with so little background, in order to avoid confusion and a reduction in interest. This paper considers two sections of CS1 that used distinct approaches in introducing the same core set of PDC concepts. A number of specific strategies are presented, as well as a detailed analysis of pre- and post-test results.
The computer science faculty at Wittenberg University continue to work towards integration of more parallel and distributed computing (PDC) material into our CS courses. Our theme is to focus on integration, as opposed to insertion, by using PDC as a medium for considering certain traditional course topics. Our targets include both upper-level courses like Algorithms and Programming Languages, and low-level courses like CS1 and CS0. Each of these courses carries ample opportunities to consider PDC in a manner that is both level-appropriate and in harmony with the traditional topics of the course. In particular, we have done a lot of work at the very low end of the curriculum, focusing on examination of PDC concepts with students with no prerequisites and little background of any kind in computing. We believe that basic understanding of PDC as a user of computing resources is an important component of what it means to be an educated member of society today. Keywords-education; parallelism; CS1; CS0; Programming Languages; Algorithms
As the importance of parallel and distributed computing (PDC) continues to increase, there is great need to introduce core PDC topics very early in the study of computer science. Even students with absolutely no prior programming experience, and perhaps little expectation of long-term computer science study, need hands-on level-appropriate experience with PDC topics in order to be well-educated in computing today. This paper illustrates how to use the Scratch programming language to introduce parallelism concepts, including the use of parallelism and communication for clean solutions, race conditions, blocking and non-blocking commands, shared versus private variables, and producer-consumer algorithms.
This paper argues that the integration of concurrency and pa rallelism topics throughout the computer science curriculum n eed not require a significant reduction in coverage of more “standar d” topics. This is accomplished by recognizing that concurrency a nd parallelism can be used as a medium for learning about other stan dard topics, rather than as an additional topic to cover. This pap er rgues this point and describes ongoing work towards it.
In previous work, Bogaerts and Leake [1,2] introduced the rank quality measure for the evaluation of conversational case-based reasoning (CCBR) systems. Rank quality assesses how well a system copes with the limited problem information available in an ongoing dialog, giving useful evaluation information not readily available from standard precision and efficiency measures. However, that work also revealed surprising challenges for developing rank quality measures, restricting the proposed measures' applicability. This paper explores two open questions from that work: 1) how to define a rank quality measure immune to the previous pitfalls, and 2) how to assess the meaningfulness of any proposed rank quality measure. The paper establishes formal requirements for a rank quality measure, presents a new formulation of the measure, and provides a formal proof and empirical evidence to support that the new measure avoids previous pitfalls and meets the formal requirements.
Rank quality is a measure of the degree of match between a retrieved list of cases and the list that would be retrieved given perfect information. This dissertation advances that the rank quality measure distinguishes between the case retrieval performance of various case-based reasoning (CBR) systems more effectively than the common combination of precision and efficiency. "More effectively" means that systems with different levels of performance can be correctly ordered by rank quality measurements, while precision and efficiency measurements suggest merely partial or even incorrect orderings. The concept of rank quality is intuitive, but a formal definition is deceptively difficult to design. Many formulations appear to have promise but are ultimately unsuitable for this task. A number of measurements related to the novel concept of distance granularity are useful in examining the problems of these formulations. The final rank quality formulation fully addresses these problems and is proven effective using both formal and experimental arguments. This dissertation begins with a brief introduction to CBR, followed by an introduction to rank quality. Rank quality is compared intuitively to precision and efficiency measures, and placed in context in CBR research. Various applications of rank quality are proposed. Following this, a number of possible formulations of rank quality are examined. This brings to the fore a number of interesting issues in case retrieval and evaluation, as well as some useful tools for this task. The final formulation of rank quality is presented and justified formally and experimentally. This formulation is compared experimentally with precision and efficiency, corresponding with the earlier intuitive discussion. Finally, rank quality is applied to the evaluation of missing attribute strategies.
Research indicates that impasse-driven learning can have important benefits for improving student mastery of material. When students recognize gaps in their understanding of a concept, attempt self-explanations to resolve the impasses, and then receive further assistance from an instructor, the concept is more likely to be learned than without the impasse or self-explanation. This paper proposes that AI programming assignments be designed to encourage useful impasses and self-explanation, by (1) guiding student attention levels to increase students’ scrutiny of areas important to pedagogical goals and 2) prompting fruitful expectation failures. It presents general guidelines for managing student attention levels when designing programming assignments, and describes how this strategy can be operationalized through the use of code frameworks. It illustrates the approach with concrete examples from sample AI assignments.
Evaluation criteria for conversational CBR (CCBR) systems are important to guide development and tuning of new methods, and to enable practitioners to make informed decisions about which methods to use. Traditional criteria for evaluating CCBR performance by precision and efficiency provide useful information, but are limited by their focus on the single point at which a case is selected at the end of the system dialogue, and by their dependence on a model of the user’s case selection criteria. This paper begins by revisiting issues in the evaluation of CCBR systems, arguing for the value of assessing the quality of the intermediate dialogue before case selection. It then proposes an evaluation approach based on rank quality to provide a fuller picture of system performance, and illustrates with an empirical study the use of rank quality to illuminate characteristics of similarity assessment strategies for partially-specified cases.
The ability to reflect contextual factors is crucial to the success of computerized support systems. Consequently, identifying how context affects the supported processes is a prerequisite for developing such systems, and ethnographic studies can play an important role in shaping system design. We are developing methods for supporting distributed collaborative troubleshooting by aiding the transmission of useful contextual information between participants, based on a study of contextual influences in the existing troubleshooting process. This extended abstract summarizes methods, motivations and observations from our socio-technical analysis, based on a nine-month naturalistic study of real-world remote diagnosis of electronic devices by ad hoc teams. It illustrates how ethnographic tools can be brought to bear for such analysis, as well as illustrating the richness of the real-world contexts that such an analysis can reveal.
Instructors’ ability to assign artificial intelligence programming projects is limited by the time the projects may require. This problem is often exacerbated by the need for students to develop significant system infrastructure, requiring them to spend time addressing issues which may be orthogonal to the AI course’s core pedagogical goals. This paper argues that such problems can be alleviated by basing coding assignments on paradigm-specific frameworks, collections of reusable code designed to be extended and applied to a variety of specific problems. In addition, frameworks can provide a basis for further student research or application of projects to real-world domains, providing additional motivation. This paper illustrates the application of a framework-based approach to teaching case-based reasoning (CBR), introducing the Indiana University Case-Based Reasoning Framework (IUCBRF), discussing its design, and presenting sample exercises that take advantage of the framework’s characteristics.