This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Generate a proposal cipher by swapping letters at two random location | |
def generate_cipher(cipher): | |
pos1 = random.randint(0, len(list(cipher))-1) | |
pos2 = random.randint(0, len(list(cipher))-1) | |
if pos1 == pos2: | |
return generate_cipher(cipher) | |
else: | |
cipher = list(cipher) | |
pos1_alpha = cipher[pos1] | |
pos2_alpha = cipher[pos2] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Takes as input a text to decrypt and runs a MCMC algorithm for n_iter. Returns the state having maximum score and also | |
# the last few states | |
def MCMC_decrypt(n_iter,cipher_text,scoring_params): | |
current_cipher = string.ascii_uppercase # Generate a random cipher to start | |
state_keeper = set() | |
best_state = '' | |
score = 0 | |
for i in range(n_iter): | |
state_keeper.add(current_cipher) | |
proposed_cipher = generate_cipher(current_cipher) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## Run the Main Program: | |
scoring_params = create_scoring_params_dict('war_and_peace.txt') | |
plain_text = "As Oliver gave this first proof of the free and proper action of his lungs, \ | |
the patchwork coverlet which was carelessly flung over the iron bedstead, rustled; \ | |
the pale face of a young woman was raised feebly from the pillow; and a faint voice imperfectly \ | |
articulated the words, Let me see the child, and die. \ | |
The surgeon had been sitting with his face turned towards the fire: giving the palms of his hands a warm \ | |
and a rub alternately. As the young woman spoke, he rose, and advancing to the bed's head, said, with more kindness \ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import numpy as np | |
W = [20,40,60,12,34,45,67,33,23,12,34,56,23,56] | |
G = [120,420,610,112,341,435,657,363,273,812,534,356,223,516] | |
W_max = 150 | |
# This function takes a state X , The gold vector G and a Beta Value and return the Log of score | |
def score_state_log(X,G,Beta): | |
return Beta*np.dot(X,G) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Takes as input a text to decrypt and runs a MCMC algorithm for n_iter. Returns the state having maximum score and also | |
# the last few states | |
def MCMC_Golddigger(n_iter,W,G,W_max, Beta_start = 0.05, Beta_increments=.02): | |
M = len(W) | |
Beta = Beta_start | |
current_X = [0]*M # We start with all 0's | |
state_keeper = [] | |
best_state = '' | |
score = 0 | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
max_state_value =0 | |
Solution_MCMC = [0] | |
for i in range(10): | |
state_keeper,best_state = MCMC_Golddigger(50000,W,G,W_max,0.0005, .0005) | |
state_value=np.dot(best_state,G) | |
if state_value>max_state_value: | |
max_state_value = state_value | |
Solution_MCMC = best_state | |
print("MCMC Solution is :" , str(Solution_MCMC) , "with Gold Value:", str(max_state_value)) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"snippets" : [ | |
{ | |
"name" : "example", | |
"code" : [ | |
"# This is an example snippet!", | |
"# To create your own, add a new snippet block to the", | |
"# snippets.json file in your jupyter nbextensions directory:", | |
"# /nbextensions/snippets/snippets.json", | |
"import this" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Create a RDD from RatingRDD that only contains the two columns of interest i.e. movie_id,rating. | |
RDD_movid_rating = ratingRDD.map(lambda x : (x.split("\t")[1],x.split("\t")[2])) | |
print("RDD_movid_rating:",RDD_movid_rating.take(4)) | |
# Create a RDD from MovieRDD that only contains the two columns of interest i.e. movie_id,title. | |
RDD_movid_title = movieRDD.map(lambda x : (x.split("|")[0],x.split("|")[1])) | |
print("RDD_movid_title:",RDD_movid_title.take(2)) | |
# merge these two pair RDDs based on movie_id. For this we will use the transformation leftOuterJoin(). See the transformation document. | |
rdd_movid_title_rating = RDD_movid_rating.leftOuterJoin(RDD_movid_title) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Create a RDD from RatingRDD that only contains the two columns of interest i.e. movie_id,rating. | |
RDD_movid_rating = ratingRDD.map(lambda x : (x.split("\t")[1],x.split("\t")[2])) | |
print("RDD_movid_rating:",RDD_movid_rating.take(4)) | |
# Create a RDD from MovieRDD that only contains the two columns of interest i.e. movie_id,title. | |
RDD_movid_title = movieRDD.map(lambda x : (x.split("|")[0],x.split("|")[1])) | |
print("RDD_movid_title:",RDD_movid_title.take(2)) | |
# merge these two pair RDDs based on movie_id. For this we will use the transformation leftOuterJoin(). See the transformation document. | |
rdd_movid_title_rating = RDD_movid_rating.leftOuterJoin(RDD_movid_title) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
print(((ratingRDD.map(lambda x : (x.split("\t")[1],x.split("\t")[2]))). | |
leftOuterJoin(movieRDD.map(lambda x : (x.split("|")[0],x.split("|")[1])))). | |
map(lambda x: (x[1][1],1)). | |
reduceByKey(lambda x,y: x+y). | |
takeOrdered(25,lambda x:-x[1])) |