text:
\section{Introduction}
Deep reinforcement learning (RL) has shown remarkable results in a variety of different domains, especially when learning policies for video games \cite{justesen2017deep}. However, there is increasing evidence suggesting that agents easily overfit to their particular training environment, resulting in policies that do not generalize well to related problems or even different instances of the same problem. Even small game modifications can often lead to dramatically reduced performance, leading to the suspicion that these networks learn reactions to particular situations rather than general strategies~\cite{kansky2017schema,zhang2018study}.

This paper has four contributions.
\textbf{First}, we show that deep reinforcement learning overfits to a large degree on 2D arcade games when trained on a fixed set of levels. These results are important because similar setups are particularly popular to use as benchmarks in deep reinforcement learning research (e.g.\ the Arcade Learning Environment \cite{bellemare13arcade}). Our findings suggest that policies trained in such settings merely memorize certain action sequences rather than learning general strategies to solve the game.
\textbf{Second}, we show that it is possible to overcome such overfitting by introducing Procedural Content Generation (PCG) \cite{shaker2016procedural}, more specifically procedurally generated levels, in the training loop. However, this can lead to overfitting on a higher level, to the distribution of generated levels presented during training. This paper investigates both types of overfitting and the effect of several level generators for multiple games.
\textbf{Third}, we introduce a particular form of PCG-based reinforcement learning, which we call \emph{Progressive PCG}, where the difficulty of levels/tasks is increased gradually to match the agent's performance.
While similar techniques of increasing difficulty do exist, they have not been combined with a PCG-based approach in which agents are \emph{evaluated on a completely new level every time a new episode begins.} Our approach applies constructive level generation techniques, rather than pure randomization, and this paper studies the effect of several level generation methods.
\textbf{Fourth}, we analyze distributions of procedurally generated levels using dimensionality reduction and clustering to understand whether they resemble human-designed levels and how this impacts generalization.

It is important to note that the primary goal of this paper is not to achieve strong results on human levels, but rather to gain a deeper understanding of overfitting and generalization in deep RL, which is an important and neglected area in AI research. We believe this paper makes a valuable contribution in this regard, suggesting that a PCG-based approach could be an effective tool to study these questions from a fresh perspective. We also see this study relevant for robotics, where an ongoing challenge is to generalize from simulated environments to real-world scenarios.

\section{Related Work}
\label{related_work}
Within supervised learning, it is generally accepted that accuracy (and other metrics) are reported on a testing set that is separate from the training set. In contrast, in reinforcement learning research it is common to report results on the very same task a model was trained on. However, several recent learning-focused game AI competitions, such as the Visual Doom \cite{Kempka2016ViZDoom} AI Competition, The General Video Game AI Learning Track \cite{liusingle,torrado2018deep} and the OpenAI Retro Contest\footnote{\url{https://contest.openai.com/}} evaluate the submitted controllers on levels that the participants did not have access to. None of them are, however, based on procedurally generated levels. The only game AI competition to prominently feature procedural level generation is the Mario AI Competition which did not have provisions for learning agents~\cite{togelius2013mario}.

Randomization of objects in simulated environments has shown to improve generality for robotic grasping to such a degree that the robotic arm could generalize to realistic settings as well \cite{tobin2017domain}. Low-fidelity texture randomization during training in a simulated environment has allowed for autonomous indoor flight in the real world \cite{sadeghi2016cad2rl}. Random level generation has been applied to video games to enable generalization of reinforcement learning agents \cite{beattie2016deepmind,graves2016hybrid,groshev2017learning,bipedalwalker2016klimov}. Several RL approaches exist that manipulate the reward function instead of the structure of the environment to ease learning and ultimately improve generality, such as Hindsight Experience Replay \cite{andrychowicz2017hindsight} and Rarity of Events \cite{justesen2018automated}.

The idea of training agents on a set of progressively harder tasks is an old one and has been rediscovered several times within the wider machine learning context. Within evolutionary computation, this practice is known as incremental evolution~\cite{gomez1997incremental,togelius2006evolving}.
For example, it has been shown that while evolving neural networks to drive a simulated car around a particular race track works well, the resulting network has learned only to drive that particular track; but by gradually including more difficult levels in the fitness evaluation, a network can be evolved to drive many tracks well, even hard tracks that could not be learned from scratch~\cite{togelius2006evolving}.
Essentially the same idea has later been independently invented as curriculum learning~\cite{bengio2009curriculum}. Similar ideas have been formulated within a coevolutionary framework as well~\cite{brant2017minimal}.

Several machine learning algorithms also gradually scale the difficulty of the problem. Automated curriculum learning includes intelligent sampling of training samples to optimize the learning progress \cite{graves2017automated}. Intelligent task selection through asymmetric self-play with two agents can be used for unsupervised pre-training \cite{sukhbaatar2017intrinsic}. The POWERPLAY algorithm continually searches for new tasks and new problem solvers concurrently \cite{schmidhuber2013powerplay} and in Teacher-Student Curriculum Learning \cite{matiisen2017teacher} the teacher tries to select sub-tasks for which the slope of the learning curve of the student is highest. Reverse curriculum generation automatically generates a curriculum of start states, further and further away from the goal, that adapts to the agent's performance \cite{florensa2017reverse}.

A protocol for training reinforcement learning algorithms and evaluate generalization and overfitting, by having large training and test sets, was proposed in \cite{zhang2018study}. Their experiments show that training on thousands of levels in a simple video game enables the agent to generalize to unseen levels. Our (contemporaneous) work here differs by implementing an adaptive difficulty progression along with near endless content generation for several complex video games.

The IMPALA system~\cite{espeholt2018impala} trains a single network to play multiple games simultaneously. Here, the same games were used for training and testing, and it is in principle possible that the network simply learned individual behaviors for all of these games within the shared model.

\section{General Video Game AI Framework}
\label{gvgai}
We are building on the General Video Game AI framework (GVG-AI) which is a flexible framework designed to facilitate the advance of general AI through video game playing \cite{perez2016general}. There are currently over 160 games in GVG-AI which are specified using the declarative video game description language (VGDL)~\cite{schaul2013video}, originally proposed in~\cite{ebner2013towards}. The game definition specifies objects in the game and interaction rules such as rewards and effects of collisions. A level is defined as an ASCII grid where each character represents an object. This allows for quick development of games and levels making the framework ideal for research purposes \cite{perez2018general}.

The GVGAI framework has been integrated with the OpenAI Gym environment \cite{torrado2018deep} which provides a unified RL interface across several different environments \cite{brockman2016openai} as well as state-of-the-art RL implementations \cite{baselines}. While GVG-AI originally provides a forward model that allows agents to use search algorithms, the GVG-AI Gym only provides the pixels of each frame, the incremental reward, and whether the game is won or lost.

\subsection{Parameterized Level Generator}
\vspace{-0.5em}
\label{generator}

\begin{figure*}[!htb]
\begin{center}
  \includegraphics[width=\textwidth]{levels}
  \caption{Procedurally generated levels for Solarfox, Zelda, Frogs, and Boulderdash with various difficulties  between 0 and 1. For each game, human-designed levels are shown as well. }
  \label{fig:pcg}
  \vspace{-0.5em}
\end{center}
\end{figure*}

Constructive level generators were designed for four hard games in GVG-AI: Boulderdash, Frogs, Solarfox and Zelda. Tree-search algorithms do not perform well in these games~\cite{bontrager2016matching}.
Constructive level generators are popular in game development because they are relatively fast to develop and easy to debug~\cite{shaker2016procedural}. They  incorporate game knowledge to make sure the output level is directly playable without additional testing. Our generators are designed after analyzing the core components in the human-designed levels for each game and include a controllable difficulty parameter

\textbf{Boulderdash Level Generator:} This game is a GVG-AI port of ``Boulder Dash'' (First Star Software, 1984). Here the player tries to collect at least ten gems and then exit through the door while avoiding falling boulders and attacking enemies. The level generation in Boulderdash works as follows: (1) Generate the layout of the map using Cellular Automata~\cite{johnson2010cellular}. (2) Add the player to the map at a random location. (3) Add a door at a random location.
(4) Add at least ten gems to the map at random locations. (5) Add enemies to the map at random locations in a similar manner to the third step.

\textbf{Frogs Level Generator:} Frogs is a GVG-AI port of ``Frogger'' (Konami, 1981).
In Frogs, the player tries to move upwards towards the goal without drowning in the water or getting run over by cars. The level generation in Frogs follow these steps: (1) Add the player at the lowest empty row in the level. (2) Add the goal at the highest row in the level. (3) Assign the intermediate rows either as roads, water, or forest. (4) Add cars to rows with a road and wood logs rows with water

\textbf{Solarfox Level Generator:} Solarfox is a GVG-AI port of ``Solar Fox'' (Midway Games, 1981). In Solarfox, the player is continuously moving in one of four directions (North, South, East, and West). The goal is to collect all the gems while avoiding the borders of the level as well as bullets from enemies in the north and the south.
The level generation for Solarfox follow these steps: (1) Add the player in the middle of the map. (2) Add some gems either in the upper half, left half, or upper left quarter. (3) Replicate the same pattern of gems on the remaining parts of the map.

\textbf{Zelda Level Generator:} Zelda is a GVG-AI port of the dungeon system in ``The Legend of Zelda'' (Nintendo, 1986). In Zelda, the goal is to grab a key and exit through a door without getting killed by enemies. The player can use their sword to kill enemies for higher scores. The level generation in Zelda works as follows: (1) Generate the map layout as a maze using Prim's Algorithm~\cite{buck2015mazes}. (2) Remove some of the solid walls in the maze at random locations. (3) Add the player to a random empty tile. (4) Add the key and exit door at random locations far from the player. (5) Add enemies in the maze at random locations far away from the player.

The difficulty of the levels created by the generator can be controlled with a \emph{difficulty parameter} that is in the interval [0, 1]. Figure~\ref{fig:pcg} shows the effect of the difficulty parameter in the four games. Increasing the difficulty has three effects: First, the area in the level where the player can move through (active level size) increases, except in Zelda and Solarfox where the level size is fixed. Second, the number of objects that can kill the player and/or the number of objects that the player can collect is increased. Third, the layout of the level gets more complex to navigate. The space of possible levels for each game, using our generators, is around $10^8$ at low difficulty to $10^{24}$ at high difficulties. Difficult levels have more possible configurations as they typically have more elements.

\section{Procedural Level Generation for Deep RL}
\label{sec:procedural}

In a supervised learning setting, generality is obtained by training a model on a large dataset, typically with thousands of examples. Similarly, the hypothesis in this paper is that RL algorithms should achieve generality if many variations of the environments are used during training, rather than just one.
This paper presents a novel RL framework wherein a new level is generated \emph{whenever a new episode begins}, which allows us to algorithmically design the new level to match the agent's current performance. This framework also enables the use of search-based PCG techniques, that e.g.\ learn from existing level distributions \cite{volz2018evolving}, which could in the future reduce the dependency on domain knowledge. However, only constructive PCG is explored in this paper.

When the learning algorithm is presented with new levels continuously during training, it must learn general strategies to improve. Learning a policy this way is more difficult than learning one for just a single level and it may be infeasible if the game rules and/or generated levels have sparse rewards. To ease the learning, this paper introduces \textbf{Progressive PCG} (PPCG),  an  approach where the difficulty of the generated levels is controlled by the  learning algorithm itself. In this way, the level generator will initially create easy levels and progressively increase the difficulty as the agent learns.

In the PPCG implementation in this paper, levels are initially created with the lowest difficulty of 0.
If the agent wins an episode, the difficulty will be incremented such that future levels during training become harder. The difficulty is increased by $\alpha$ for a win and decreased by the same amount for a loss. In our experiments, we use $\alpha = 0.01$. For distributed learning algorithms, the difficulty setting is shared across all processes such that the outcome of all episodes influences the difficulty of future training levels. We compare PPCG to a simpler method, also using procedurally generated levels, but with a constant difficulty level. We refer to this approach as \textbf{PCG X}, where \emph{X} refers to the fixed difficulty setting.

\section{Experiments}
\label{experiments}

To evaluate the presented approach, we employ the reinforcement learning algorithm \emph{Advantage Actor-Critic} (A2C) \cite{mnih2016asynchronous}, specifically the implementation of A2C from the Open AI Baselines together with the GVG-AI Gym framework. The neural network has the same architecture as in Mnih et al.~\cite{mnih2016asynchronous} with three convolutional layers and a single fully-connected layer. The output of A2C consists of both a policy and value output in contrast to DQN. A2C is configured to use 12 parallel workers, a step size of $t_{max}=5$, no frame skipping following \cite{torrado2018deep}, and a constant learning rate of $0.007$ with the RMS optimizer \cite{ruder2016overview}. The code for our experiments is available online\footnote{\url{https://github.com/njustesen/a2c_gvgai}}.

We compare four different training approaches. \textbf{Lv X}: Training level is one of the five human-designed levels. \textbf{Lv 0-3}: Several human-designed levels (level 0, 1, 2, and 3) are sampled randomly during training. \textbf{PCG X}: Procedurally generated training levels with a constant difficulty \emph{X}. \textbf{Progressive PCG (PPCG)}: Procedurally generated training levels where the difficulty is adjusted to fit the performance of the agent.

Each training setting was repeated four times and tested on two sets of 30 pre-generated levels with either difficulty 0.5 and 1 as well as the five human-designed levels. The training plots on Figure \ref{fig:training_plot} and the test results in Table~\ref{tab:results} are averaged across the four trained models where each model was tested 30 times on each test setup (thus a total of 120 test episodes per test set for each training setup). All four training approaches were tested on Zelda. Only PCG 1 and PPCG were tested on Solarfox, Frogs, and Boulderdash due to computational constraints. The trained agents are also compared to an agent taking uniformly random actions and the maximum possible score for each test set is shown as well.

\section{Results}

\subsection{Training on a few Human-Designed Levels}
\begin{table}[!htb]
\begingroup
\setlength{\tabcolsep}{6pt}
\renewcommand{\arraystretch}{1}
\small
\begin{center}
\begin{tabular}{l|ccccccc }
  \hline
  \multicolumn{8}{c}{Zelda} \\
  \hline
  Training & PCG 0.5 & PCG 1 & Lv 0 & Lv 1 & Lv 2 & Lv 3 & Lv 4 \\
  \hline
  Max.  & 4.40 & 6.87 & 8.00 & 8.00 & 8.00 & 10.00 & 8.00 \\
  Random & 0.38 & 0.22 & 0.26 & 0.17 & -0.11 & -0.07 & 0.18 \\
  \textbf{\scriptsize{60M steps:}}  & & & & & & & \\
  Level 0 & 0.28 & 0.51 & \color{red}6.97 & -0.45 & -0.53 & 0.07 & -0.58 \\
  Level 4 & 0.56 & 0.07 & -0.51 & 0.99 & 0.04 & -0.35 & \color{red}5.93 \\
  Level 0-3  & 1.98 & 2.37 & \color{red}6.95 & \color{red}7.17 & \color{red}7.20 & \color{red}8.17 & \textbf{1.91} \\
  PCG 0.5 & 3.45 & 4.00 & 2.21 & 2.28 & 0.92 & \textbf{2.27} & 0.15 \\
  PCG 1 &0.27 &3.56 &2.40 &1.37 &1.49 &2.88 &-0.62 \\
  PPCG  & 3.44 & 4.28 &2.67 &3.35 &2.43 &1.89 &0.96 \\
  \textbf{\scriptsize{100M steps:}}  & & & & & & & \\
  PCG 1 & 3.05 & 4.38 & 2.49 &1.54 &1.18 & 2.04& -0.29\\
  PPCG  & \textbf{3.82} & \textbf{4.51} & \textbf{2.71} & \textbf{3.74} & \textbf{2.84} & 1.90 & 0.88\\
  \hline
  \multicolumn{8}{c}{Solarfox*} \\
  \hline
  Max.  & 30.83 & 51.83 & 32.00 & 32.00  & 34.00  & 70.00  & 62.00 \\
  Random  & -3.68 & -4.55 & -5.49 & -4.80 ,& -5.41 & 2.03 & 1.13 \\
  \textbf{\scriptsize{40M steps:}}  & & & & & & & \\
  PCG 1 & \textbf{20.70} & \textbf{32.43} & \textbf{22.00} & \textbf{21.83} & \textbf{26.00} & \textbf{43.96} & \textbf{28.16}  \\
  PPCG  &16.08 &21.40 &16.87 &10.26 &12.02 &27.37 & 20.00  \\
  \hline
  \multicolumn{8}{c}{Frogs} \\
  \hline
  Max.  & 1.00 & 1.00 & 1.00 & 1.00 & 1.00 & 1.00  & 1.00 \\
  Random & 0.01 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 \\
  \textbf{\scriptsize{40M steps:}}  & & & & & & & \\
  PCG 1 & 0.01 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 \\
  PPCG  & \textbf{0.81} & \textbf{0.57} & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 \\
  \hline
  \multicolumn{8}{c}{Boulderdash} \\
  \hline
  Max.  & 31.50 & 29.80 & 48.00 & 52.00 & 58.00  & 48.00 & 44.00 \\
  Random  & 6.29 & 3.71 & 0.85 & 2.58 & 3.5 & 0.65 & 2.66 \\
  \textbf{\scriptsize{60M steps:}}  & & & & & & & \\
  PCG 1 & \textbf{14.63} & \textbf{8.32} & \textbf{5.39} & \textbf{10.28} & \textbf{5.85} & \textbf{5.08} & \textbf{8.27} \\
  PPCG  & 11.78 & 4.86 & 3.44 & 0.98 & 0.68 & 0.41 & 3.32 \\
  \hline
\end{tabular}
\end{center}
\caption{Test results of A2C under different training regimens: a single human-designed level (\emph{Level 0} and \emph{Level 4}), several human-designed levels (\emph{Level 0-3}), procedurally generated levels with a fixed difficulty (\emph{PCG 0.5} and \emph{PCG 1}), and \emph{PPCG} that progressively adapts the difficulty of the levels to match the agent's performance. \emph{Random} refers to results of an agent taking uniformly random actions and \emph{Max} shows the maximum possible score.
Scores are in red if the training level is the same as the test level. The best scores for a game, that is not marked red, are in bold. *Only three repetitions of PPCG and one of PCG 1 were made for Solarfox so far.}
\label{tab:results}
\vspace{-2em}
\endgroup
\end{table}

Policies trained on just one level in Zelda (\emph{Lv 0} and \emph{Lv 4} in Table~\ref{tab:results}) reach high scores on the training level but have poor performance on all test levels (human-designed and procedurally generated). It is clear that these are prone to memorization and cannot adapt well to play new levels. The scores on the training levels are close to the maximum scores achievable while the scores on the test levels are often lower than the random policy, a clear indication of overfitting in reinforcement learning. Policies trained on four human-designed levels in Zelda also achieve high scores on all four training levels. The testing scores are marginally higher than when trained on a single level, on both the human-designed level 4 and the PCG levels.

\begin{figure*}[!ht]
\centering
\captionsetup[subfigure]{labelformat=empty}
\begin{subfigure}{.245\textwidth}
\includegraphics[width=\textwidth]{Progressive_PCG_in_Zelda}
\caption{(a) PPCG in Zelda}
\end{subfigure}
\begin{subfigure}{.245\textwidth}
\includegraphics[width=\textwidth]{Progressive_PCG_in_Solarfox}
\caption{(b) PPCG in Solarfox*}
\end{subfigure}
\begin{subfigure}{.245\textwidth}
\includegraphics[width=\textwidth]{Progressive_PCG_in_Frogs}
\caption{(c) PPCG in Frogs}
\end{subfigure}
\begin{subfigure}{.245\textwidth}
\includegraphics[width=\textwidth]{Progressive_PCG_in_Boulderdash}
\caption{(d) PPCG in Boulderdash}
\end{subfigure}%
\caption{Smoothed mean scores and level difficulties during training across five repetitions of Progressive PCG in Zelda, Solarfox, Frogs, and Boulderdash. One standard deviation is shown in opaque.
*Only three repetitions of PPCG and one of PCG 1 for Solarfox.}
\label{fig:training_plot}
\vspace{-1em}
\end{figure*}

\subsection{Training on Procedurally Generated Levels}
Agents trained on procedurally generated levels with a fixed difficulty learned a general behavior within the distribution of procedurally generated levels, with mediocre scores in Zelda, Solarfox, and Boulderdash, while no progress was observed in Frogs. These results match similar observations by Torrado et al.~\cite{torrado2018deep}, in which DQN and A2C fail to learn anything on just one level in Frogs after 1 million training steps. While PCG 1, here with 40 million steps, also fails to learn Frogs, PPCG achieves a score of 0.57 (57\% win rate) in the test set of procedurally generated levels with difficulty 1 (comparable to human levels in difficulty - see Figure \ref{fig:pcg}). In Zelda, PCG 1 was able to achieve strong scores while PPCG is slightly better.
Interestingly, for the two cases where PPCG is able to reach difficulty 1 during training (Frogs and Zelda), it outperforms PCG 0.5 on PCG 1. As PPCG never reaches the most difficult levels during training in Boulderdash and Solarfox, this is to be expected.
In Boulderdash, the agents trained with PCG 1 reach decent scores (8.34 on average) on levels with difficulty 1. PPCG reached high scores during training but failed to win as the difficulty reached 0.2 and thus trained only on easy levels.

\subsection{Generalization on Human-Designed Levels}
The results demonstrate that introducing procedurally generated levels allows the trained behaviors to generalize to unseen levels within the training distribution. It is, however, interesting whether they also generalize to the five human-designed levels in GVG-AI.

In Zelda, PCG and PPCG are decent in the human-designed levels while best in the procedurally generated levels.
In Frogs, PCG and PPCG are unable to win in the human-designed levels indicating a clear discrepancy between the two level distributions.
In Boulderdash, PCG 1 achieved on average 5.08--10.28 points (out of 20) in the human-designed levels compared to 8.32--14.63 in the procedurally generated levels. PPCG performs worse in this game since it never reached a difficulty level similar to the human-designed levels.
Similarly, in Solarfox, PCG 1 achieved on average a higher score than PPCG on the five human-designed levels. PCG 1, however, shows remarkable generalization in Solarfox with similar scores in human-designed and procedurally generated levels.

\subsection{Qualitative Analysis of Agent Replays}
In Zelda, PPCG has learned to reliably strike down and avoid enemies but only sometimes collects the key and exits through the door. Whether this is due to the difficulties of navigating in tricky mazes or a lack of motivation towards the key and door is currently unclear.
In Solarfox, PCG 1 has learned to effectively pick up the diamonds and avoid fireballs, occasionally getting hit while trying to avoid them. This behavior is remarkably human-like. Sometimes the agent wins in the human-designed levels, which is quite impressive. PPCG jiggles a lot around the starting location to collect nearby diamonds, most likely because the easy procedurally generated levels have diamonds near the starting location, and it never reached the hard levels during training.
In Frogs, PPCG always moves towards the goal while it sometimes dies when crossing the water with only a few logs being available. We suspect that navigation in this game is learned more easily than in other games as the goal in Frogs is always at the top of the screen.
In Boulderdash, PCG 1 learned to fight and pick up nearby diamonds, also under boulders, while it does not seem to be capable of long-term planning. It often dies fighting enemies or moving boulders and thus dies rather quickly in most level. Often dying from boulders and enemies can explain why PPCG never reached a difficulty higher than 0.2; it simply gets killed early when these entities are introduced in the levels.

\section{Exploring the Distribution of Generated Levels}
We do not expect agents to play well on levels that are dissimilar from their training distribution. To investigate the distribution of the procedurally generated levels, and how the structure of these correlate with human-designed levels, we generated 1000 levels with difficulty 1 for each game. The high-dimensional structure of levels was compressed to two dimensions using principal component analysis (PCA), and afterward clustered with the density-based spatial clustering of applications with noise (DBSCAN) approach. The transformed space of levels is visualized in Figure \ref{fig:clustering}. For PCA to work on GVG-AI levels, they have been transformed into a binary 3D array of shape (tile\_type, height, width) and then reshaped into a 1D array. The human-designed levels were included in both the transformation and clustering processes.

\begin{figure*}[!htb]
\begin{center}
  \vspace{-.5em}
  \includegraphics[width=\textwidth]{pca}
  \caption{Visualization of the level distributions and how they correlate to human-designed levels (white circles). Levels were reduced to two dimensions using PCA and clustered using DBSCAN ($\epsilon=0.5$ and a minimum of 10 samples per cluster). Outliers are black and centroids are larger.}
  \label{fig:clustering}
  \vspace{-1em}
\end{center}
\end{figure*}

The generated levels for Solarfox are clustered in three wide groups: (1) levels with only green diamonds, (2) levels with both green and blue diamonds, and (3) levels with only blue diamonds. None of the human-designed levels use both types of diamonds and thus only belong to two of the clusters.
For Zelda, only one cluster is discovered without outliers.
The generated levels in Frogs have been clustered into 19 groups. This is due to the high structural effect of roads and rivers that goes across the level. It is noticeable how level 4 is the most distant outlier. This is because level 4 has a river on the starting row which is a level variation not captured by the level generator for Frogs.  Level 0--3 are near the same small cluster while the generated levels are spread across many isolated clusters. It is not exactly clear why PCG 1 and PPCG fail to play on all the human-designed Frogs levels while the level distribution is remarkably different from the other games.
In Boulderdash, similarly to Zelda, only one cluster emerges, but here, all human-designed levels are distant outliers. This effect is most likely a result of the fixed amount of open space in the human-designed levels with padding of only one tile while the generated levels are more varied and cave-like.

\section{Discussion}
\label{discussion}

The results of our experiments affirm the original concern with the way reinforcement learning research is often evaluated and reported. When it is reported that an algorithm has learned a policy that can play a game, it may simply mean that this policy has found optimal actions for a very small subspace of the possible observations the game offers. This boils down to the network mapping observations in this subspace to actions without learning general concepts of the game. Table~\ref{tab:results} shows this with the huge disparity between
the performance on the training levels compared to the test levels.
If the goal of the agent is to learn how to play a game, then this work shows that it must be evaluated in several variations of the game.

Incorporating procedurally generated levels in the training loop also presents a variety of  new and interesting challenges. One such challenge is how to scale the difficulty of the levels to smoothen the learning curve in PPCG. In Frogs, it was very effective to apply padding to easy levels, creating smaller levels in the beginning, while it was not sufficient for Boulderdash. Another challenge is how to ensure that the distribution of procedurally generated levels matches another distribution, in this case human-designed levels. We have provided a tool using dimensionality reduction and clustering, which can be used to improve the design of constructive level generators or perhaps guide search-based level generators in future work. While the results vary across the four games, analyzing when the PCG-based approach works and when it fails gave valuable insights into the generalization abilities of these RL algorithms. We believe that search-based PCG is an interesting area for future work that could ultimately lead to RL agents with more general policies. We believe that this study is also relevant for robotics; learning to generalize from simulation to real-world scenarios where pure randomization of the environment is insufficient.

\section{Conclusion}
\label{conclusion}

We explored how policies learned with deep reinforcement learning generalize to levels that were not used during training. The results demonstrate that agents trained on just one or a handful of levels often fail to generalize to new levels. This paper presented a new approach that incorporates a procedural level generator into the reinforcement learning framework, in which a new level is generated for each episode.
The presented approach, \emph{Progressive PCG} (PPCG), shows that dynamically adapting the level difficulty during training allows the agent to solve more complex levels than training it on the most difficult levels directly.
This technique was able to achieve a win rate of 57\% in difficult Frogs levels, compared to 0\% for the non-progressive approach. Additionally, in Zelda this approach was superior across procedurally generated levels and human-designed levels. In Solarfox and Boulderdash, the level difficulty of PPCG never reached the maximum during training and here training on procedurally generated levels with a fixed difficulty setting resulted in the highest performance. The results of this paper also highlight the important challenge of ensuring that the training distribution resembles the test distribution. We have provided a tool that can assist with the second challenge, using dimensionality reduction and clustering to visualize the difference between two distributions of video game levels.

\section*{Acknowledgements}
Niels Justesen was financially supported by the Elite Research travel grant from The Danish Ministry for Higher Education and Science. Ahmed Khalifa acknowledges the financial support from NSF grant (Award number 1717324 - "RI: Small: General Intelligence through Algorithm Invention and Selection.").

\bibliographystyle{abbrv}

redpajama_set_name: RedPajamaArXiv


text:
Assam: Five of a family killed in road mishap in Goalpara
GUWAHATI , December 3, 2021 6:28 pm
Five members of a family including two children were killed and three others seriously injured in a road mishap on National Highway 15 in Western Assam's Goalpara district.
Police said the accident occurred around 9 pm on Thursday night at Bolbola Godhabori under Agia police station in Goalpara district.
The incident happened when an Eon car that was heading towards Goalpara collided head-on with a Swift Dzire.
Police said the front sides of both vehicles were completely damaged following the incident.
Three people died on the spot and five others, including two children who were critically injured, were immediately admitted to Goalpara civil hospital.
But two children succumbed to their injuries at the hospital.
The deceased persons were identified as Nazma Khatun, Chabura Khatun, Rahim Ali, Juel and Suel
Anwar Ali and Chelima Begum, who were injured in the accident, are undergoing treatment at Goalpara Civil Hospital.

redpajama_set_name: RedPajamaCommonCrawl


text:
Rogers police search for robbery suspect
Updated: 8:26 AM CDT Aug 6, 2013
Police say a man that held up a gas station in Rogers overnight is still on the loose.
Rogers police are searching for a suspect who robbed a gas station with a knife.Police said a white man attempted to rob a gas station on Walnut in Rogers. They said a clerk confronted the man. Police said the clerk was slashed on the arm by the suspect. He is expected to be okay.The owner of the gas station has been going through surveillance video with police to get a description of the suspect.
Rogers police are searching for a suspect who robbed a gas station with a knife.
Police said a white man attempted to rob a gas station on Walnut in Rogers. They said a clerk confronted the man. Police said the clerk was slashed on the arm by the suspect. He is expected to be okay.
The owner of the gas station has been going through surveillance video with police to get a description of the suspect.


text:
THE PEARL THIEF
Page Extent: 416
Imprint: Bloomsbury Childrens
From the internationally acclaimed bestselling author of Code Name Verity comes a stunning new story of pearls, love and murder – a mystery with all the suspense of an Agatha Christie and the intrigue of Downton Abbey.
Sixteen-year-old Julie Beaufort-Stuart is returning to her family's ancestral home in Perthshire for one last summer. It is not an idyllic return to childhood. Her grandfather's death has forced the sale of the house and estate and this will be a summer of goodbyes. Not least to the McEwen family – Highland travellers who have been part of the landscape for as long as anyone can remember – loved by the family, loathed by the authorities. Tensions are already high when a respected London archivist goes missing, presumed murdered. Suspicion quickly falls on the McEwens but Julie knows not one of them would do such a thing and is determined to prove everyone wrong. And then she notices the family's treasure trove of pearls is missing.
This beautiful and evocative novel is the story of the irrepressible and unforgettable Julie, set in the year before the Second World War and the events of Code Name Verity. It is also a powerful portrayal of a community under pressure and one girl's determination for justice.
ABOUT THE AUTHOR: Elizabeth Wein is an American-born writer best known for her young adult historical fiction. She holds both American and British citizenship. Wein's first five books recount a version of the King Arthur stories which moves the narrative to the kingdom of Aksum in 6th century Ethiopia. The stories focus on her interpretation of Medraut (Mordred) and his half-Aksumite, half-British son Telemakos.
Her 2012 novel, Code Name Verity, is a World War II thriller focusing on the friendship between two young British women, a transport pilot and a spy. It received critical acclaim and was designated a Michael L. Printz Award Honor book in 2013. A follow-up novel, Rose Under Fire, also set in World War II, tells the story of an Air Transport Auxiliary pilot who is captured and sent to the Ravensbrück concentration camp.
Wein's short stories have been published in collections edited by Ellen Datlow, Terri Windling, and Sharyn November. She is a regular reviewer for the New York Times Book Review.
Awards: Edgar Award for Best Young Adult, Golden Kite Award for Fiction.
Her Novels are -
Star Wars: The Last Jedi: Cobalt Squadron
Code Name Verity
Rose Under Fire
Black Dove, White Raven
PRK B 692
Elizabeth Wein


text:
Q: Web app server: How to show a document that the user doesn't has access I 'm designing a system with 100s of sites,1,000s of SP groups 1.000s of lists and 100.000s of documents. After a certain period of time, the documents will "move" from their current location  to a different (sharepoint web application - record management?) archive site, and being replaced with "link to a document".
An SQL server will store the permissions of the archived documents, because with so many documents the limit of 50.000 unique permissions will be reached very qyickly. The SQL table will have two columns:the GUID of the document and a A.D. group that should have READ rights. An http handler will decide if the user is elligible to see a document and then call web app server to show it. So, the web app server will show a document that the user doesn't has access. Is this possible?
I could copy the desired document  to a "scratch" list, but I wouldn't want that.

redpajama_set_name: RedPajamaStackExchange


Use: Apply a small amount of balm and rub vigorously.
Developed within the greatest respect for tradition, our balm consists of Moringa Oleifera and 7 Thai herbs. It is ideal to relieve muscle and joint pain, and also to appease certain evils of daily life, such as mosquito bites or small sensations of dizziness. Like all other products in our shop , our balm is 100% natural and does not contain any chemical.
How to use the moringa balm ?
Apply the balm on the skin to soothe the feelings of dizziness, or pain, and mosquito bites.
surprise car il ressemblait au "baume du tigre" mais pas du tout et me soulage en cas de crises d'arthrose juste , pot très petit !!!!!


text:
THE CORNWALLIS RIVER'S GIANT BROWNS (July 3/98)
Kentville area angler Harold Mahar has lost count of the five- and six-pound trout he landed in 35 years of fishing the Cornwallis River. The larger brown trout he remembers well, a couple of 10-pounders and a 12-pounders that broke a long-standing river record. Then there's a trout he will never forget since it's one of the largest browns ever to come from the Cornwallis River.
Fishing with a white bucktail jig on his favourite stretch of river west of Kentville, Mahar caught a magnificent brown trout of 14 and three-quarter pounds. While this was 20 years ago, Mahar still remembers the difficulty he had landing the trout. "It took me almost an hour to get it in," he said when I talked with him recently.
Mahar's giant brown isn't the largest yielded by the Cornwallis, however. In 1970 Gilbert (Gilly) Forsythe of Kentville used a bucktail jig to take a brown equal to Mahar's monster. Forsythe's trout weighed 14 pounds, 13 ounces and it was caught in the same section of river as Mahar's fish.
The Cornwallis River has produced even larger browns and Ralph (Cheetah) Malin, Meadowview, may hold the record. Malin has been fishing the Cornwallis for over 30 years and he counts among his accomplishments a slew of five- and six-pound browns, two 10-pounders and a 12-pound fish. On a spring morning in the mid-70s, Malin used a red bucktail jig to take the unofficial Cornwallis River record, a brown trout weighing 15 and a half pounds.
Malin told me recently that there were witnesses when he caught this fish and there are pictures of it. I've called Malin's trout the "unofficial record" because nobody actually keeps a river log or record book. The only running tally, so to speak, has been kept in this column. Since 1965 I've noted here many of the giant brown trout that were taken from the Cornwallis and this may be the only record that exists for future generations of anglers to look at.
This column salutes anglers Cheetah Malin, Harold Mahar and Gilly Forsythe for their angling accomplishments. Honourable mention must go to Coldbrook area angler Doug Graves for a 31 and a half inch brown trout estimated to weigh 15 pounds. Graves caught the fish using a Muddler Minnow in the Lovett Road section of the Cornwallis. Four days after it was caught, and after it had shrunk considerably from being refrigerated, the trout weighed 12 pounds. The fisheries officer who did the weighing estimated that the live weight of the trout was 15 pounds.
Honourable mention must also go to Paul Moors, Tupper Road, Kentville, and Ludie Gallant, Coldbrook, whose largest browns are eight-pounders. Moors has been fishing the Cornwallis for 35 years and like most veteran river men has taken his share of four-, five-, and six-pound browns. Gallant has landed three eight and a half pounders. He tells me that in over three decades of fishing the Cornwallis, he has caught over 100 browns measuring 20 and more inches.
I would be remiss in not mentioning Kentville angler Hugh Aker. In 1960 Aker caught a brown trout just over 10 pounds that stood as the Cornwallis River record for years. Howard Redden, Kentville, is another angler who has fished the Cornwallis for decades and has caught a number of large browns. Some years ago, he took seven-pound fish two nights in a row.
Hundreds of anglers have fished the Cornwallis River since brown trout were introduced in the 40s and I've undoubtedly overlooked (or not heard about) the large fish they've caught. If readers are aware of anglers who have caught big brown trout, please call or write.
Posted on July 3, 1998 by edwingcoleman. This entry was posted in Outdoor 1998. Bookmark the permalink.
← WHITE ROCK'S GRIST AND LUMBER MILL (July 3/98)
DR. CHASE'S RECIPES – A "CURIOUS" BOOK (July 10/98) →


Wyncliffe Townhouse offers accommodation in Cardiff, 5 km from Cardiff University. The property is 6 km from University of Glamorgan Cardiff Campus and features views of the garden. There is a private bathroom with a bath. Cardiff Castle is 6 km from Wyncliffe Townhouse, while Motorpoint Arena Cardiff is 6 km away. Cardiff Airport is 20 km from the property.


text:
The School LAND Trust Program, established by the legislature in 1999, distributes the "annual dividend" from the permanent State School Fund through school districts and charter schools for all public schools in the state. Elected parents, elected teachers, and the school's principal serve on School Community Councils. School Community Councils in each school prepare a plan to address the school's greatest academic need. Local School Boards approve the plans, and funding is sent to each school with an approved plan before the school year begins.
The Ranches Academy Board of Trustees serves as the School Community Council.
The Ranches Academy Final Reports
School Land Trust will be discussed at the following board meetings:
To view the agenda or minutes for these meetings, please visit our Board of Trustees page.


We know successful careers lead to successful lives, and we want the best for you. While working as an Express Associate, you can become eligible for a variety of benefits.
* Express Associates may be required to work a specified number of hours and/or weeks before they become eligible for some benefits. Benefits may vary by Express location. Your Express representative will be able to provide more detail about specific benefits for which you qualify.


Bursting onto the literary scene with her acclaimed debut novel The People in the Trees in 2013, Hanya Yanagihara continues to wow with her multi-award nominated A Little Life. Similarly upsetting, challenging, and deeply moving, A Little Life takes readers from the jungle to the streets of New York as it chronicles the relationships between four male friends from the time they graduate college until they are in their fifties. In its pages, Yanagihara offers up a profound story of brotherly love that explores race, homosexuality, loyalty, and success, and culminates in a dark examination of trauma, memory, and the limits of human endurance.


text:
"The ideal plan, according to our spy at Skywalker Ranch, is to be able to release a new Star Wars film within 24 months after the release of the last re-re-release (is that right?) of Return of the Jedi 3D. Too early for story details but one thing that our source is certain about, they will not be prequels but instead sequels. It's not for certain if they will be the long awaited Episodes 7, 8 and 9 but could instead be Episodes 10, 11 and 12 or possibly even further out in the Star Wars timeline. And by giving space in the timeline, possibly even as far as 100 years or 1,000 years in the Star Wars universe future, Lucas avoids having to make these stories "fit in" with what the previous stories have told."
But according to Wired, a Lucafilm spokesman said to them via e-mail:
"This is, of course, completely false, George Lucas has plenty of projects to keep him busy right now — including plenty of Star Wars projects — but there are no new Star Wars feature films planned."
BUT then again, IESB predicted this and has been right about a lot of their rumours in the past:
"Can we expect Lucasfilm to confirm our story? Have they ever? Nope, I am sure that they will spin this or completely deny the story, but we will stand 100% behind our source."
In any case, I would love to see it happen cause I mean they've already made the prequels. All of the integrity the Star Wars franchise had was sold off a long time ago so what's the worst that could happen?
Tell us what you think in the comments!
[Sources: IESB / Wired]
I would love this if only to see most -if not all- of the post-ROTJ EU negated. Especially the more recent stuff.
rorydean says:
Aside from the fact that the prequels generated nearly $3 billion at the box office world wide, it is inevitable that another trilogy is down the road and the suggestion that Lucas as 'plenty of other projects to work on' is smoke and mirrors. Along with hype and an expensive ad campaign, the next best marketing ploy is to build a slow simmer in the blogosphere and fan sites, to capitalize on that stew and when it finally becomes time to announce the next batch of whatevers the fans and general enthusiasts will be in such a frenzy that I guarantee opening weekend records at the box office. Time will tell. But will less-obsessed film enthusiasts care? Hmmmm.


text:
Even impossible says i am possible
Smoking Ban up in smoke?
anig
aramkool
Arfi
Bloggermania
BlogStore
boobu
boobu1
boobukane
Brain Hunters
chess addict
clever nonsense
Concealed Mind
DREAM SPACE
easy 2 learn
Ester's Daily Thoughts
Ester's Money Journal
fiammaveneta
FilmAsia
Freezebox
Health Zones
KateLove's
KUMAGCOW
Mahen Jambi
masenchipz
naamnaadu
Ranjeet
Sathukudi
Srihari
sush1
TechSpeaky
teebob
The AGU
TRAMZ
WBDesigns
Yusa
On Oct 2, 2008 the world's biggest public smoking ban came into effect in India. With 1 million people losing their life every year due to smoking, the ban was implemented to prevent smoking in public places like stations, government offices, airports, amusement hubs (theatres, malls etc), and hotels among others.
India is the third largest market for cigarettes, with up to 250 million smokers and around 102 billion cigarettes sold every year. Though it is too soon to know whether the ban would be a success or not, it did fail on the first day as the authorities were ignorant about the new law. Further, ITC along with Indian Hotel Association is planning to go to the Supreme Court in November to challenge the ban. Higher taxes, pictorial warnings and now a ban are likely to come as a big blow for India's largest cigarette manufacturer, ITC. The company earns around 60% of its revenues from the cigarette division.
Posted by divya at 9:24:00 AM 0 comments
Some facts on grids!!!
A cluster is a type of parallel and distributed system, which consists of a collection of inter-connected stand-alone computers working together as a single integrated computing resource.
A Grid is a type of parallel and distributed system that enables the sharing, selection, and aggregation of geographically distributed 'autonomous' resources dynamically at runtime depending on their availability, capability, performance, cost, and users' quality-of-service requirements.
A Cloud is a type of parallel and distributed system consisting of a collection of inter-connected and virtualized computers that are dynamically provisioned and presented as one or more unified computing resources based on service-level agreements established through negotiation between the service provider and consumers.
At a cursory glance, Clouds appear to be a combination of clusters and Grids. However, this is not the case.
Clouds are clearly next-generation data centers with nodes "virtualized" through hyper visor technologies such as VMs, dynamically "provisioned" on demand as a personalized resource collection to meet a specific service-level agreement, which is established through a "negotiation" and accessible as a composable service via Web Service technologies such as SOAP and REST.
Buffett's first and last biography
For a tribe that calls itself 'Value Investors', this is nothing but an investing world equivalent of 'Harry Potter'. Infact, on second thoughts, this could be even bigger because while the wand wielding child wizard had more than a few tomes dedicated to his histrionics, this is probably the first and the last authorized biography of arguably the biggest financial wizard of our times.
We are referring to one Mr. Warren Buffett and his first authorised biography (The Snowball: Warren Buffett and the Business of Life) that hit the stands yesterday. And like with most of his other endeavors, especially of the investing types, the timing could not have been more impeccable here as well. With the US financial industry roiled in one of the worst crises in decades and with reputation of quite a few firms in complete tatters, the book about a man whose investment techniques are widely believed to be the gold standard has indeed come as a breath of fresh air.
Japanese Banks in the lime Light
While the US and European banks are barely managing to stay afloat, Japanese banks are beginning to flaunt their might. This has been amply demonstrated in the past few weeks when Mitsubishi bought a 20% stake in Morgan Stanley and Nomura acquired Lehman's assets in Asia.
Ironically, while the excesses of the 1980s made the Japanese banks flounder, consequently taking them considerable time to recover from the same, it is this very fact that has more or less insulated them from the subprime malaise which has badly afflicted US and European banks. During the boom, Japan received a lot of flak for making acquisitions in the US at inflated prices, which over a period of time the Japanese banks found difficult to digest.
But the US financial system at that time was robust. The scenario has reversed now. While the credit crisis has helped Japanese banks acquire stakes in US banks at attractive prices, the health of the US financial sector is now in question. Therefore, how the Japanese banks will integrate these acquisitions assumes considerable importance given that cultures in both the countries are like chalk and cheese and the fact that the financial sector in Japan is just beginning to witness signs of revival.
TARP falls into a trap
The US House of Representatives (Lower House of Parliament) has rejected TARP or 'Troubled Assets Relief Program' of the US government to bail out financial institutions. The US$ 700 bn plan that would have allowed the US Treasury Department to rescue the financial system got a thumbs down yesterday by a vote of 228 to 205. This sent the US stock markets in a tizzy, as the benchmark Dow Jones Industrial index declined by a massive 777 points (7%), its biggest single day decline ever.
Warren Buffett had recently proclaimed that the financial crisis in the US was 'everybody's problem' and not just that of Wall Street. He had in fact warned policymakers that the US might face its 'biggest financial meltdown' if they did not do something to secure the financial system. Now with the bailout plan turning turtle, experts are predicting the financial system and the economy to be in dire straits. Although another version of the bailout plan will likely go before the US Congress for a vote, concerns remain that the passage of the bill could be a more drawn-out process.
Halloween is traditionally celebrated on October 31st. Its roots lie in the Celtic tradition of celebrating the harvest and trying to ward of the dangers of the impending winter. The evil spirits, it was feared, would disease the crops and the cattle and harm the ability of people to survive winter.
To ward of the evil spirits, it was tradition to keep a hollowed out pumpkin with a candle inside. The evil spirits, it was believed, would stay away from this lighted pumpkin. In modern days in modern homes the children go around the neighbourhood dressed to scare and say, "Boo - Trick or Treat?"
Well, Halloween has come early this year.
The evil spirits of greed and excess have made some pretty loud "Boo!" sounds and the global financial markets are in a complete state of panic.
Bear Stearns had to be rescued.
Lehman has filed a USD 631 billion bankruptcy protection.
Freddie and Fannie – owners of 30% of the total home loans in USA – had to be rescued by the US government.
AIG – the world's largest insurance company – has just been given a rescue package by the US government which now owns 80% of AIG. Central banks around the world are lending money to these financial giants – who were hailed as geniuses by all the media – to keep them alive. Announcements of losses of hundreds of millions of dollars and rescue packages of tens of billions of dollars seem like daily occurrences.
Today, seven years ago to this date, is the day when the terrorists brought their war on American soil.
As the TV cameras telecast the visuals of the World Trade Center collapsing, there were many people celebrating in some parts of the world.
It was, they argued, appropriate to celebrate: The Great Satan had been inflicted a body blow. It serves them right, said the sympathizers of the Taliban, as they danced in the streets. The Yankees have caused enough harm in many parts of the world and it is time that they were taught a lesson. The Yankees must leave the Middle East and its oil to the locals and not the Zionists or the favoured few families that control the oil wealth in the deserts.
One man's terrorist is another man's freedom fighter.
An eye for an eye, said the great Mahatma, will merely make the whole world blind.
American policy has indeed been harmful in many instances. Many of us in India are upset at the support given to Pakistan - which most Indians regard as, to use an Americanism, "a terrorist state". The 9/11 attacks were seen by some Indians as an opportunity for the US to work closer with India. The world's two largest - and self-styled greatest - democracies working together in a new world order.
Well, there is a new world order now.
For decades we had a "uni-polar" world. America was the Empire. To some it was Evil, to some it was great, but it was an "Empire".
It may not have been a fair "umpire" though. US foreign policy was driven by a combination of what the "Zionists" wanted (the Israel policy); what the multinationals wanted (engage China so that its labour markets are opened for building the world's low-cost factory); and what the local Americans wanted (cheap goods, cheap oil, and cheap money). Somewhere in this equitation were many other important players each with their own angle of ensuring that business interest drove foreign and economic policy.
The Great Indian Growth Story
India has achieved amazing economic growth in the recent years.
Better jobs and increased salaries have improved the standard of living of people and changed the way they view things.
And the transformation is there for everybody to see..
Computers are penetrating the middle class Indian population at an astonishing rate and PC sales are at an all-time high. Air-conditioners are now considered a necessity rather than luxury.
There are large malls everywhere ...consisting of restaurants offering international cuisines, multistoried bookstores, showrooms for expensive furniture, whole shops for electronic gadgets, jewels, high-end clothing apparel, sports goods and what not.
The number of people owning cars and houses has also gone up dramatically in the last 3 years.
Nowadays, if people feel that spending money on something will make their lives more enjoyable, they do it without having second thoughts. They have extra money to spend at their discretion now!
And how has this new economic environment benefited Indian companies?
Obviously yes, that over the last 10 years, the sales and profits of BSE-30 companies has grown by about 8 times.
It is a remarkable achievement indeed.
But There Is Also A Downside To This Growth...
While the recent economic growth has been great for India on one hand, it has also caused unprecedented problems on the other.
Sure, economic development has generated more jobs and transformed the lives of millions.
But to meet the demands of the ever-expanding population and sustain this growth in the long run, India needs some basic amenities - starting with simple requirements like POWER.
And this is where the problem lies.
Look...
Any person would be satisfied if he has enough power to light a bulb for reading, cooking some hot food, keeping his home cool in summer and doing other small things that electricity can do.
But even this is not happening in India right now.
What is happening actually is...
Frequent power outages are bringing people's lives to a complete standstill.
People can hardly plan work, meetings or any other activity anymore.
Dinner parties are completely ruled out, so even their social life has also been affected severely.
Students can't study after they come from school due to lack of power.
Shopkeepers are forced to close shop early because of the late evening power cuts.
And these are just a few.
Imagine the plight of industries and factories which are totally dependent on electricity for their functioning.
To be frank, the problem is so bad I could go on with this forever.
You and I may live in a city where the problem is not so severe. That doesn't mean the problem does not exist.
This problem does exist and it's as real as it can get.
Earn attractive returns from stocks without taking big risks
Are you the kind of person who loves to earn attractive returns from stocks without taking big risks?
If yes, then you'll definitely want to hear what I've got to say.
You see, I recently identified a remarkable investment opportunity in the Power sector - one that could deliver returns in excess of 100% over the next few years.
There's huge demand in this sector, and it's literally growing up by the day. So it's a great opportunity for you to make money.
Additionally, the stock prices of companies best placed to benefit from this demand have crashed. So if you act quickly, you can also get these "Blue-chip" stocks for dirt-cheap.
Millions of Indians across India have learnt to live with power shortages day in and day out. But there's something they still don't realize.
This is only the beginning. The worst is yet to come.
You see, India is and has always been short of power supply. Power cuts have been a part and parcel of people's lives. And now, factors like growth in household and commercial consumption, electrification of rural areas and manufacturing growing faster are aggravating the problem even further.
According to a report, India's demand for power will soar to a whopping 315,000 MW by 2017 - more than double the current installed capacity.
Meeting this demand will require a huge investment...which means this is a great opportunity for you to make money.
Yes! A lot of money is going to be spent in this sector in the coming years.
To begin with, a spending of a couple hundred billion dollars has been proposed to improve the infrastructure in the power sector, in areas ranging from setting up power plants to delivering this power to the people properly.
There are only a handful of companies that are big enough to take on this kind of work and benefit directly from the increase in spending.
These are all well-managed companies which have been doing well... and in my view will continue to do well over the long-term.
When shares of such companies are available at attractive prices, why take unnecessary risks to earn extraordinary returns?
Buy these stocks and earn attractive returns easily without taking big risks. So try to grab them at the earliest.
Rupee ?
Influenced by the rising strength of the dollar, the Indian rupee has been on a depreciating trend since the start of the year. Infact, the rupee fell to 44.88 a dollar, the lowest level in almost 21 months on speculation that oil importers were buying dollars as crude fell toward US$ 100 a barrel. Also contributing to the Indian currency's decline has been the weakness in the stock market, as foreign investors choose to exit from the same on concerns of a global meltdown. India's worsening current account position has also played a rose in the rupee's fall. India imports around 70% of the oil that it consumes and hence the import of oil plays a dominant role in determining the current account position. According to Bloomberg, India's average oil import costs increased to US$ 8.2 bn a month this year, from US$ $5.5 bn in 2007.
Interestingly, as per reports in a leading business daily, exporters who were trying to sell dollars at 40/US$ have chosen to stay on the sidelines when the rupee is just a hair's breadth away from breaching the 45/US$ mark. The RBI, which actively intervenes in the forex market, has been subdued so far. Unless the fundamentals, which have led to a weakening rupee, drastically change, the RBI is unlikely to favour a stronger rupee.
Posted by divya at 11:10:00 AM 0 comments
cool facts (28)
Shout here!!!


text:
O'Meara, Martin
** VC 3970 Stretcher bearer 16th Bn.
Born 1885 at Lorrha in what in modern Tipperary, Eire. He came to WA in 1912 and was working at Collie when he enlisted on 19 August 1914 giving his occupation as sleeper hewer, Nok his sister Lucy O'Meara, of Lorrha. Embarked at Fremantle 22 December 1915 per A31 Ajana. In August 1916 he was nominated for the Victoria Cross presented to him by King George V. He displayed outstanding bravery at the Battle of Poziers on successive days 9th-12 August 1916. On that last day he suffered a severe wound to the stomach and was evacuated to England. He returned to his unit in France and was twice wounded, to the face on 9 April 1917 and to the buttocks, hips and back on 8 August 1917. O'Meara returned to Fremantle in September 1918 and hospitalised at Stromness Military Hospital, an old house on the corner of Keane and Monument Streets Mosman Park. Here, in December 1918, he was reported to be suicidal and homicidal and had to be restrained. O'Meara was discharged from the AIF 30 November 1919 and spent most of the next 16 years as a patient at Claremont Asylum. He died on 20 December 1935 ' of war causes' and given a military funeral at Karrakatta Cemetery attended by three VCs, two Senators, the State RSL President and some of his mates of the 16th Battalion. He was buried in the RC Section HA Grave 0093. Citation: 'For most conspicuous bravery. During 4 days of very heavy fighting he repeatedly went out and brought the wounded officers and men from 'No Man's Land' under intense artillery and machine gun fire. He also volunteered and carried up ammunition and bombs through a heavy barrage to a portion of the trenches which was being heavily shelled at the time. He showed throughout an utter contempt of danger and undoubtedly save many lives.' Martin O'Meara collected uncounted wounded and dead from some of the major battlefields on the Great War where Australia suffered heavy casualties including: Bullecourt, Reincourt, Ypres, Villers Bretonneux (April-May 1917) Hebuterne (March 1917). Award and service medals: VC, 1914-1915 Star, BWM and VM.


This season, the University of Dayton men's basketball team will no longer be under the radar of other teams in the nonconference schedule and the Atlantic 10 Conference.
"Very few people are going to look at us and say, well that's little old Dayton," head coach Archie Miller said.
Vee Sanford entered UD basketball lore with a game-winning, last second shot against Ohio State University in the first round of the 2014 NCAA Tournament. After taking down Syracuse University and Stanford University, the Flyers lost to the University of Florida with a bid to the Final Four on the line.
"Just giving the city a reason to celebrate was something special," junior forward Devon Scott said.
After each win, campus erupted. After each win, the Cinderella story developed further. Now all of the press and the accolades are in the rearview mirror.
A new season began Saturday, with the team hoping to build something special once again.
This year's team is not letting the historic wins of March Madness and the Elite Eight run of 2014 interfere with the start of this season.
The Flyers started out their 2014-15 season with an exhibition win against Southern Indiana at home. With last year's tournament run in mind and key pieces returning, league coaches picked UD to finish third in the A-10.
The team hopes to use the success as motivation rather than satisfaction with past accomplishments.
"I feel like this year we are going to show people that last year wasn't a fluke. Like 'they just happened to win some games.' No, we won those games because we were tougher than teams and we work harder and we will continue to do that," redshirt senior guard Jordan Sibert said.
Losing many dedicated leaders such as Devin Oliver, Matt Kavanaugh and Sanford, new leadership will have to step up this season.
"We kind of lost that vocal leadership, especially guys who have been in the program for a while," Sibert said.
With many of the leaders graduating last year, rising players are pushing themselves to be stronger leaders for this "True Team's" 2014-2015 season.
"One thing that I want to do is just take my knowledge and try to be as vocal as possible with it, so you know we have a lot of new guys in place now and they need to know the ropes and need to understand what we're doing and what it took to where we got to last year," Sibert said.
Sibert isn't the only one looking to bring more leadership to the team.
"I'm hoping to be more vocal and just have a positive attitude toward the season so far, be more aggressive on the floor and just try to win at all costs," Pierre said.
According to Miller, Scott has stepped up as a prominent voice in this year's locker room, signaling that new leadership for the Dayton basketball program is beginning to take form.


text:
Q: Make liquibase execute sql file in gradle task So what I have is:

*

*MySQL DB running in docker container

*SQL file with sql statements that need to be executed on mentioned
mysql db when developer executes gradle task.

Currently I can import it manually with:
docker exec -i <mysql-container-name> mysql -u<username> -p<password>  < file.sql
And i know I can create docker exec task for this but as I see using liquibase for this job would be better for a lot of reasons, but I have zero experience with it and I hope someone can tell me how to configure liquibase and use it in this case.

A: When you have a mysql running in a docker container, you connect to it using localhost. For example: url=jdbc:mysql://localhost:<port>/<dbname>
You can read more about it on:

*

*https://docs.liquibase.com/workflows/database-setup-tutorials/mysql.html

*https://docs.liquibase.com/tools-integrations/springboot/springboot.html


text:
Q: Add a new row in the free jqgrid not showing I want to add a row to my grid, which uses the free version of jqgrid.
Because the build in add button is not very intuitive, I am using a separate add button.
So I want to do something like this;
$("#btnAddContract").click(function () {
    var id = $("#ContractId").val();
    var url = GetHiddenField("sir-selected-contract-url") + id + "/add";
    var callback = contractAdded;
    dataService.addSelectedContract(url, callback);
});

var contractAdded = function (data) {
    var grid = $("#grid");
    var position = 0;
    grid.insertRow(data, position); // pseudo code - this cannot work
}

Of course the grid.insertRow method does not exist. What should I be using to make this work?

A: jqGrid has the method addRowData, which allows to add new row to the grid. You don't posted the JavaScript code, which you use to create jqGrid. Thus I have to guess some things.
First of all, if you use local grid (datatype: "local"), then adding the row is pure local changing of jqGrid without any communication with the server. The method addRowData is low-level method. It allows to add new row without forcing sorting of data and without testing the current size of the page. As the result you can add the row before/after any other row of the grid. After adding the row, the number of rows could be larger as the page size.
It's important to know that every row of the grid has id attribute (the rowid). See here. The id value of new row is the first parameter of addRowData. The second parameter of addRowData is the object with the data of the row. The third parameter specifies the position of the new row in the grid. It could be: "first", "last", "before", "after", "afterSelected", "beforeSelected". The 4-th parameter of addRowData should be specified only if you use "before" or "after" as the 3-d parameter. It specifies the rowid of the row, before/after which the new row should be added.
One more possibility to add new row to the grid would be the following code:
var p = $("#grid").jqGrid("getGridParam"); // get reference to all parameters
p.data = newData; // replace the data array to another data
$("#grid").trigger("reloadGrid", { current: true }); // reload holding the selection

One can see that the above code can be used to replace the data of the grid with another data. It could take a little more time as the call of addRowData, but the large advantage of the approach: you will see correctly sorted data. The page size and the information in the pager will be absolutely correct too. I recommend you to test both ways and to see which one better corresponds your requirements.


In the Lord of the Rings trilogy, "mithril" is a rare, indestructible metal whose beauty never tarnishes; in the real world, however, it's the name of three different blockchain projects, all of which are trying to score pop culture points with investors.
It's of little surprise that the name has proven so hot in the crypto world – "Lord of the Rings" is, after all, the geek culture equivalent to Shakespeare, and there's no lack of geeks in the cryptocurrency community.
Indeed, cryptocurrency projects of all kinds are branding themselves or their coins with notable sci-fi or fantasy references.
For instance, there's Tron, a top 20 cryptocurrency by market capitalization, which seems clearly riffing off the classic 1980s film by the same name (which got a successful reboot in 2010).
And lastly, a crypto entrepreneur and veteran of the trade in URLs or domain names, Joshua Metnick, pointed to Neo as a power name. Sometimes called the "etheruem of China," the Neo team rebranded from Antshares in June, taking on the name of the protagonist in the super popular Matrix trilogy.
Looking at their CoinMarketCap chart, it would be hard to argue the switch didn't have an impact on the coin's price. The protocol's token shot up in value right afterward, from $1, and has remained around $65.
Indeed, the interest is using monikers that are well-known throughout nerd culture raises an important question: just how important are these names to the evolution of a crypto token?
In the case of mithril, several crypto entrepreneurs are all hoping that name pays off.
After the project raised 26,000 ether in a private sale of 5,000 "mithril" tokens, the company launched an app, called Lit – available for Android and iOS – which together already have 10,000 daily active users.
Speaking to his choice of the token name, Huang told CoinDesk he is a big fantasy and sci-fi fan, and although he originally considered "uru," the stone used to make Thor's hammer, uru didn't sound as cool as mithril.
Meanwhile, another project Mithril Ore is built around the idea of ethereum's forthcoming proof-of-stake system, Casper. The company will sell mithril ore tokens to buy ethereum that can be used to create a large stake, which the company believes will allow smaller investors to get involved in mining without needing to have mined for some time.
As it happens, many rappers have also rhymed the praises of this second mithril, as well.
And the final project (which changed up the spelling a bit to hearken back to a material used to create armor and weapons in the fictional universe of the Final Fantasy video games) Mythril, isn't a token project, but instead, a security analysis tool maintained by etheruem startup Consensys.
As such, Mueller, who created it in an effort to eliminate the major vulnerabilities in ethereum smart contract code that have led to the loss of millions of dollars in ether, built Mythril to find the faults in smart contracts so that malicious actors won't be able to later.
That said, one company already gave up on the name – pointing to the need to differentiate itself and eliminate confusion – rebranding from Mithril Coin to Plactal.
And the overlapping names could later explode into a mess of trademark wars and litigation, some of which we've already seen in the crypto space.
Looking back at the early days of the web, for instance, shows how important securing names can be.
For example, two entrepreneurs acquired the domain "MP3.com" in 1997 and started posting new music there. At the time, people were searching ferociously for places to get mp3s, and while the entrepreneurs weren't the ones who invented the mp3, they were smart enough to see possibilities in that piece of digital real estate.
The next year, they sold a 10 percent stake in the company for $45 million, according to Wikipedia, and in 1999, it went public raising $370 million – a record IPO at the time.
Then, in the pre-mobile days, a name could also be a strict claim to the territory. For instance, any name attached to a ".com" dominated any other URL.
Still, Metnick explained, there are ways to enforce trademarks. Using the U.S. as an example, he said that knowingly violating someone's trademark incurs exceptionally harsh damages.
On the other hand, a company has to enforce its trademark. If a trademark holder waits too long to enforce the use of a name for a product that conflicts with the own, the courts can decide to let them coexist, Metnick explained.
For a cryptocurrency or crypto token, a name would be considered a "trademark" under the law of most western countries provided it's actually in circulation, because trademarks are established by use (not registration).


text:
Home > Q&A > History > By what stages do Marx and Engels foresee the development of proletariat opposition to the bourgeoisie?
By what stages do Marx and Engels foresee the development of proletariat opposition to the bourgeoisie?
The proletariat has to pass through numerous stages of its development to create solid opposition to the bourgeoisie. First of all, the proletariat resists the bourgeoisie individually, then using factories, and finally, by means of representatives of one certain trade. And their activities were directed to the instruments of bourgeois production but not to the conditions. With time, the proletariat increased in number, and its strengths to resist increased as well. By means of competitions, the proletariat started taking the highest positions. The next stage was to organize the proletariat into a political party and cope with the competitions, which happened within the proletarian class. And finally, the proletariat, as a political party, had to destroy all past securities and pay more attention to individual property.
Answer's rating:
Answered by IvyPanda
One of our experts with a specialization in History has kindly provided an answer to this question. Feel free to rate the answer and let us know if you liked it.
Pick a subjectArtBusinessCultureDesignDiet & NutritionEconomicsEducationEntertainment & MediaEnvironmentFamily, Life & ExperiencesHealth & MedicineHistoryLawLinguisticsLiteraturePhilosophyPolitics & GovernmentPsychologyReligionSciencesSociologySportsTech & EngineeringTourismTransportationWarfare
Ask your questionSending...
Select a citation style:
IvyPanda. (2020, May 14). By what stages do Marx and Engels foresee the development of proletariat opposition to the bourgeoisie? https://ivypanda.com/q/marx-and-engels-development-of-proletariat-opposition-to-the-bourgeoisie/
IvyPanda. (2020, May 14). By what stages do Marx and Engels foresee the development of proletariat opposition to the bourgeoisie? Retrieved from https://ivypanda.com/q/marx-and-engels-development-of-proletariat-opposition-to-the-bourgeoisie/
"By what stages do Marx and Engels foresee the development of proletariat opposition to the bourgeoisie?" IvyPanda, 14 May 2020, ivypanda.com/q/marx-and-engels-development-of-proletariat-opposition-to-the-bourgeoisie/.
1. IvyPanda. "By what stages do Marx and Engels foresee the development of proletariat opposition to the bourgeoisie?" May 14, 2020. https://ivypanda.com/q/marx-and-engels-development-of-proletariat-opposition-to-the-bourgeoisie/.
IvyPanda. "By what stages do Marx and Engels foresee the development of proletariat opposition to the bourgeoisie?" May 14, 2020. https://ivypanda.com/q/marx-and-engels-development-of-proletariat-opposition-to-the-bourgeoisie/.
IvyPanda. 2020. "By what stages do Marx and Engels foresee the development of proletariat opposition to the bourgeoisie?" May 14, 2020. https://ivypanda.com/q/marx-and-engels-development-of-proletariat-opposition-to-the-bourgeoisie/.
IvyPanda. (2020) 'By what stages do Marx and Engels foresee the development of proletariat opposition to the bourgeoisie'. 14 May.
Powered by CiteTotal, best essay citation maker
How do the bourgeoisie override national and cultural boundaries according to Communist Manifesto? What were the role of bourgeoisie in the establishment of nation states?	What do Marx and Engels say about the nature of work for the proletariat? Who are the "dangerous class"
Writing Toolkit
Text Summarizer Topic Generator Thesis Generator Text Paraphraser
The Questions & Answers page by our educators at IvyPanda is a great resource for students on their quest for knowledge. If you've ever had a question that you just couldn't find an answer to—there's a good chance our Q&A section has what you need. We asked our top educators, with years of expertise, to answer some of the most common inquiries from students. Feel free to use those answers for your research purposes or to ask a question yourself!


Well begun is half done, as the saying goes, and Moscow-based Russian producer Alexander Babaev in the gise of his stage alias Rekord 61 must know that quote after this first brick of his newborn label Konstruktiv, whose name well summarise its underlying music policy. The release number 1 includes a couple of excellent tracks and a remix by renowned Berlin dj and producer Phon.o, which transpose some compositional techniques of IDM, based on the deconstruction of beat patterns, to make something which will make you think about the building of a monumental skyscraper. Softened hammering, muffled snare drum, bleeping ticktocks, a slowly rising synth-brass portrays an intense activity or a big construction site (or an imaginary electronic anthill) on the initial "Kaskad", whose source of inspiration came from monumental art and technical aesthatics of giant industrial constructions in the middle of the last century. It got wisely remixed by Phon.o, who rehashed pulleys, levers, cranes, concrete mixers and other tools by drier hits and effects on buzzing bass and synth-brass which accentuated the epic aura of the original version. The second track on B-side, "Prostor", lies on the catchy sound of a slapped bass, banging claps and joyful breaks, which gradually become stronger and stronger while rhythmical synths climb over unutterable heights.The foundations have just been laid.
The frail and extremely delicate beauty of a porcelain ballerina, who's doomed to spin inside a carillon, which sometimes jangle after some smashes against a poky jail where it was boxed in, and secretly carries a tune or sing the pang for her condition from the utter darkness of her velvet-covered cloistered cubicle, could be envisaged while listening to this lovely release by Tel Aviv-based harpist Adaya Godlevsky, who partially spikes the platitudinous image of harpist's crouched repetition of enchanted harmonies, resoundign from some imaginary fairyland, by means of quick dynamic changes, sudden paws, strums, scratches, staccato tone clusters, unexpected "latin" spurts and guessed tonal faltering which crack and recast conventional harp harmonies. Such a contrast resurface with catchy afflatus on tracks like "Seam", the almost claustrophobic "First Light", the magnetic "Wondering My Way To You" and "Field", where thespian Adaya's canto intertwines with celtic harp's strings and assuages the arthritic plunks on them after her voice effused catchy isolated vocals on the first three "fragments", where her voice sounds like emitting prostrate palpitations. Intriguing and crepuscular music.
A fortyseven minutes lasting one-track album by German ambient producer Marsen Juhls, mostly known as Marsen Jules, Falter and Krill.Minima, which has been titled "The Endless Change Of Colour", could be easily considered as a sort of suite for contemplation of those led lamps which gradually cast different colours. Its very slow graceful and intrinsically sumptuously somber movement could corroborate such an assumption, but if you consider the manner of playing and the imaginary vector followed by this refined chiselor of frequencies this release seems one of the last phase of an implosive process which seemingly seized his sound since his last release "Nostalgia" on Oktaf. The entire suite has been moulded from the elongation of three overstretched audio streams taken from a single phrase of an old jazz record. Marsen explains the underlying process by his own words: "These streams are transformed into loops which break the original instrumentation down into sound resembling pure waves, harmonics and overtones. These loops play to different time signatures to create phasing patterns that continuously move and dance around each other in a constantly-evolving lattice of sound. Despite it being based on a very strict and limited set of rules the music could, in theory, be endless and ever-changing". Such a compositional process results into a daydreaming and entrancing listening experience which could be easily associated to the generative ambient works by Brian Eno or the emotional dilutions by William Basinski, but you could even imagine it as the possibly missing fourth part of "Somnium", the hypnagogic masterpiece by Robert Rich. If you manage to cope with the subtly hypnotic mickey-like effect by sharpening your eardrums, more trained listeners will easily enjoy the fineness of almost undetectable sonic variations of this beguiling lulling suite.


Combinated 6 pin small format (Best type) interchangeable core.
A control key is required to install the IC core (included).
This Arrow small format interchangeable core is of solid brass construction. To install the interchangeable core, a control key is necessary. The control key is included in this package. This product is available as keyed alike or keyed different.


In 4th grade the students learn about Colorado. We have divided up the information about Colorado into 4 parts and each of the 4th grade teachers teaches one rotation. The students will then rotate to each teacher for a 12 day unit.
This is an outline of what may be covered during the Colorado History rotation. This is not an exact plan, it will always be changing.
KWL Chart – What do you know about our state?
-Draw on the floor the size of a room in the their homes.
-Each person decides what they want to work on. They can be done individually, with a partner, or as a whole group.
Make an advertisement to join the expedition, detailing expectations and key points on the trip.
Write a journal entry as a member of the expedition detailing the adventures of the past few days of your journey.
Continue working on explorer jigsaw.
-Fill out the types of mining page as you watch the video.
-Cookie Mining: Choose a type of cookie, mine it with toothpicks and papeclips, keeping track of the time, and then fill out spreadsheet to see it you made money.
-The objective of the lesson is that the miners didn't make much money.
-Keep track of how many times they tried to become a state or a territory on the board.
-Read about Emily Griffith individually or as a table group.


Our AGM for 2014 was held on 21 June at Lennoxlove House in Haddington, East Lothian. We would like to pass on our grateful thanks to His Grace the Duke of Hamilton for allowing us to use his home for our AGM and to Farm Manager, Keith Stuart, for his valuable help in making the arrangements.
Over 35 people attend the event. After the formal meeting had completed lunch was taken in the dining room. We were then treated to a guided tour of parts of Lennoxlove House which has a fascinating history. This tour was followed by a visit to view the White Parks which reside in the parkland surrounding the house. We firstly viewed three newly-registered bulls which are now up for sale before visiting newly-born calves with their mothers, year old heifers and White Park bull Castle Joseph and his lady friends.
During the evening the group came together once again for a fantastic evening meal at the Waterside Bistro in Haddington.


text:
package hex;

import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import water.TestUtil;
import water.fvec.Frame;

public class CreateFrameTest extends TestUtil {
  @BeforeClass() public static void setup() { stall_till_cloudsize(1); }

  @Test public void basicTest() {
    CreateFrame cf = new CreateFrame();
    cf.rows = 100;
    cf.cols = 10;
    cf.categorical_fraction = 0.1;
    cf.integer_fraction = 1 - cf.categorical_fraction;
    cf.binary_fraction = 0;
    cf.factors = 4;
    cf.response_factors = 2;
    cf.positive_response = false;
    cf.has_response = true;
    cf.seed = 1234;
    Frame frame = cf.execImpl().get();
    Assert.assertTrue(frame.numCols() == 11);
    Assert.assertTrue(frame.numRows() == 100);
    // Tries to print a frame
    frame.toString();
    frame.delete();
  }

  @Test public void binaryTest() {
    CreateFrame cf = new CreateFrame();
    cf.rows = 10;
    cf.cols = 100;
    cf.categorical_fraction = 0;
    cf.integer_fraction = 0;
    cf.binary_fraction = 1;
    cf.binary_ones_fraction = 1e-2;
    cf.factors = 1;
    cf.response_factors = 2;
    cf.positive_response = false;
    cf.has_response = true;
    cf.seed = 1234;
    Frame frame = cf.execImpl().get();
    Assert.assertTrue(frame.numCols() == 101);
    Assert.assertTrue(frame.numRows() == 10);
    // Print a fame
    frame.toString();
    frame.delete();
  }

  @Test public void timeTest() {
    CreateFrame cf = new CreateFrame();
    cf.rows = 10;
    cf.cols = 100;
    cf.categorical_fraction = 0;
    cf.integer_fraction = 0;
    cf.binary_fraction = 0;
    cf.time_fraction = 1;
    cf.binary_ones_fraction = 0;
    cf.factors = 1;
    cf.response_factors = 2;
    cf.positive_response = false;
    cf.has_response = true;
    cf.seed = 1234;
    Frame frame = cf.execImpl().get();
    Assert.assertTrue(frame.numCols() == 101);
    Assert.assertTrue(frame.numRows() == 10);
    // Print a fame
    frame.toString();
    frame.delete();
  }

  @Test public void stringTest() {
    CreateFrame cf = new CreateFrame();
    cf.rows = 10;
    cf.cols = 100;
    cf.categorical_fraction = 0;
    cf.integer_fraction = 0;
    cf.binary_fraction = 0;
    cf.time_fraction = 0;
    cf.string_fraction = 1;
    cf.binary_ones_fraction = 0;
    cf.factors = 1;
    cf.response_factors = 2;
    cf.positive_response = false;
    cf.has_response = true;
    cf.seed = 1234;
    Frame frame = cf.execImpl().get();
    Assert.assertTrue(frame.numCols() == 101);
    Assert.assertTrue(frame.numRows() == 10);
    // Print a fame
    frame.toString();
    frame.delete();
  }

  @Test public void everything() {
    CreateFrame cf = new CreateFrame();
    cf.rows = 100;
    cf.cols = 100;
    cf.categorical_fraction = 0.1;
    cf.integer_fraction = 0.1;
    cf.binary_fraction = 0.1;
    cf.time_fraction = 0.1;
    cf.string_fraction = 0.1;
    cf.binary_ones_fraction = 0.1;
    cf.factors = 5;
    cf.response_factors = 5;
    cf.positive_response = false;
    cf.has_response = true;
    cf.seed = 1234;
    Frame frame = cf.execImpl().get();
    Assert.assertTrue(frame.numCols() == 101);
    Assert.assertTrue(frame.numRows() == 100);
    // Print a fame
    frame.toString();
    frame.delete();
  }

  @Test public void trainTest() {
    Frame frame1 = null;
    Frame frame2 = null;
    try {
      frame1 = createFrameFactory().execImpl().get();
      frame2 = createFrameFactory().execImpl().get();
      frame1.toString();
      frame2.toString();

      for (int i = 0; i < frame1.numCols(); ++i) {
        Assert.assertTrue(frame1.vec(i).get_type() == frame2.vec(i).get_type());
      }
      // This fails...
      // Assert.assertTrue(isBitIdentical(frame1, frame2));
    } finally {
      if (frame1 != null) frame1.delete();
      if (frame2 != null) frame2.delete();
    }
  }
  //
  private CreateFrame createFrameFactory() {
    CreateFrame cf = new CreateFrame();
    cf.rows = 5;
    cf.cols = 100;
    cf.categorical_fraction = 0.1;
    cf.integer_fraction = 0.1;
    cf.binary_fraction = 0.1;
    cf.time_fraction = 0.1;
    cf.string_fraction = 0.1;
    cf.binary_ones_fraction = 0.1;
    cf.factors = 5;
    cf.response_factors = 5;
    cf.positive_response = false;
    cf.has_response = true;
    cf.seed = 123456789;
    cf.seed_for_column_types = 1234;
    return cf;
  }
}

redpajama_set_name: RedPajamaGithub