{ localUrl: '../page/Arbital_path.html', arbitalUrl: 'https://arbital.com/p/Arbital_path', rawJsonUrl: '../raw/1rt.json', likeableId: '711', likeableType: 'page', myLikeValue: '0', likeCount: '2', dislikeCount: '0', likeScore: '2', individualLikes: [ 'AlexRay', 'PiCris' ], pageId: 'Arbital_path', edit: '3', editSummary: '', prevEdit: '2', currentEdit: '3', wasPublished: 'true', type: 'wiki', title: 'Arbital path', clickbait: 'Arbital path is a linear sequence of pages tailored specifically to teach a given concept to a user.', textLength: '2327', alias: 'Arbital_path', externalUrl: '', sortChildrenBy: 'likes', hasVote: 'false', voteType: '', votesAnonymous: 'false', editCreatorId: 'AlexeiAndreev', editCreatedAt: '2016-05-11 20:53:18', pageCreatorId: 'AlexeiAndreev', pageCreatedAt: '2016-01-27 16:33:23', seeDomainId: '0', editDomainId: 'PaulChristiano', submitToDomainId: '0', isAutosave: 'false', isSnapshot: 'false', isLiveEdit: 'true', isMinorEdit: 'false', indirectTeacher: 'false', todoCount: '0', isEditorComment: 'false', isApprovedComment: 'true', isResolved: 'false', snapshotText: '', anchorContext: '', anchorText: '', anchorOffset: '0', mergedInto: '', isDeleted: 'false', viewCount: '178', text: 'When a user wants to learn a particular concept, Arbital can use the existing [3jf "requires"] and [3jg "teaches"] relationships to generate a list of [16x pages] for the user to read. This list will present pages in order, so that the reader can build on the [1ln knowledge] they already have, and by the end of it the reader will have all the necessary requirements to understand the concept they are trying to learn.\n\n### The algorithm\n\nIt will be easier to create paths if you understand Arbital's underlying algorithm. Here are the key steps:\n\n1. Gather the list of the requisites the user wants to learn.\n2. Remove the ones the user already knows.\n3. For each requirement, find a page that teaches it and add it to the path. (There is a somewhat complex scoring function for picking the best teaching page.)\n4. For each of those pages, take their requirements and repeat from step #2.\n5. Once the entire tree is generated, Arbital linearizes it, so that every requisite is taught before pages that require it. (If there are dependency cycles, they are broken arbitrarily.) Note that as long as the requirement constraints are satisfied, the pages can otherwise appear in any order.\n\nOn the /learn/ page the resulting pages are displayed in a sequence. If you want to see the underlying tree structure, use the ⋮ menu to switch the view. It should make it more clear why the algorithm chose certain pages in certain order, and you can also explore the alternatives.\n\nFor a demo, take a look at: [1zq].\n\n### Debugging\n\nHere are a few likely issues you might run into and tips on how to address them.\n\n**The order of the pages is not correct:** \n\n* If it makes sense, add more requirements to the pages you want to come later in the path.\n* Take a look at the [2gy learn link guide] to see how you can manually specify the order.\n\n**The algorithm is picking another page instead of yours:**\n\n* This is technically a feature. If both pages teach a requisite, then they should be interchangeable. If the other page is lacking a requirement, you can add it. All things being equal, the algorithm prefers to pick the page with fewer requirements.\n* Take a look at the [2gy learn link guide] to see how you can manually require your page to appear on the path.\n\nIf all else fails, report your issue to us, and we'll help you!', metaText: '', isTextLoaded: 'true', isSubscribedToDiscussion: 'false', isSubscribedToUser: 'false', isSubscribedAsMaintainer: 'false', discussionSubscriberCount: '1', maintainerCount: '1', userSubscriberCount: '0', lastVisit: '2016-02-25 09:59:02', hasDraft: 'false', votes: [], voteSummary: [ '0', '0', '0', '0', '0', '0', '0', '0', '0', '0' ], muVoteSummary: '0', voteScaling: '0', currentUserVote: '-2', voteCount: '0', lockedVoteType: '', maxEditEver: '0', redLinkCount: '0', lockedBy: '', lockedUntil: '', nextPageId: '', prevPageId: '', usedAsMastery: 'true', proposalEditNum: '0', permissions: { edit: { has: 'false', reason: 'You don't have domain permission to edit this page' }, proposeEdit: { has: 'true', reason: '' }, delete: { has: 'false', reason: 'You don't have domain permission to delete this page' }, comment: { has: 'false', reason: 'You can't comment in this domain because you are not a member' }, proposeComment: { has: 'true', reason: '' } }, summaries: { Summary: 'When a user wants to learn a particular concept, Arbital can use the existing [3jf "requires"] and [3jg "teaches"] relationships to generate a list of [16x pages] for the user to read. This list will present pages in order, so that the reader can build on the [1ln knowledge] they already have, and by the end of it the reader will have all the necessary requirements to understand the concept they are trying to learn.' }, creatorIds: [ 'AlexeiAndreev' ], childIds: [], parentIds: [ 'arbital_features' ], commentIds: [], questionIds: [], tagIds: [ 'out_of_date_meta_tag' ], relatedIds: [], markIds: [], explanations: [], learnMore: [ { id: '3081', parentId: 'Arbital_path', childId: 'Arbital_path', type: 'subject', creatorId: 'AlexeiAndreev', createdAt: '2016-06-17 21:58:56', level: '1', isStrong: 'false', everPublished: 'true' } ], requirements: [ { id: '3079', parentId: 'Arbital_teaches', childId: 'Arbital_path', type: 'requirement', creatorId: 'AlexeiAndreev', createdAt: '2016-06-17 21:58:56', level: '1', isStrong: 'false', everPublished: 'true' }, { id: '3080', parentId: 'Arbital_requires', childId: 'Arbital_path', type: 'requirement', creatorId: 'AlexeiAndreev', createdAt: '2016-06-17 21:58:56', level: '1', isStrong: 'false', everPublished: 'true' } ], subjects: [ { id: '3081', parentId: 'Arbital_path', childId: 'Arbital_path', type: 'subject', creatorId: 'AlexeiAndreev', createdAt: '2016-06-17 21:58:56', level: '1', isStrong: 'false', everPublished: 'true' } ], lenses: [], lensParentId: '', pathPages: [], learnMoreTaughtMap: {}, learnMoreCoveredMap: {}, learnMoreRequiredMap: {}, editHistory: {}, domainSubmissions: {}, answers: [], answerCount: '0', commentCount: '0', newCommentCount: '0', linkedMarkCount: '0', changeLogs: [ { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '15816', pageId: 'Arbital_path', userId: 'EricBruylant', edit: '0', type: 'newTag', createdAt: '2016-07-06 22:25:33', auxPageId: 'out_of_date_meta_tag', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '10061', pageId: 'Arbital_path', userId: 'AlexeiAndreev', edit: '3', type: 'newEdit', createdAt: '2016-05-11 20:53:18', auxPageId: '', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '10050', pageId: 'Arbital_path', userId: 'AlexeiAndreev', edit: '2', type: 'newRequiredBy', createdAt: '2016-05-11 18:59:24', auxPageId: 'arbital_learn_link', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '10046', pageId: 'Arbital_path', userId: 'AlexeiAndreev', edit: '2', type: 'newChild', createdAt: '2016-05-11 18:59:03', auxPageId: 'arbital_learn_link', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '10030', pageId: 'Arbital_path', userId: 'AlexeiAndreev', edit: '2', type: 'newRequiredBy', createdAt: '2016-05-11 17:04:37', auxPageId: 'how_to_arbital', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '10009', pageId: 'Arbital_path', userId: 'AlexeiAndreev', edit: '2', type: 'newTeacher', createdAt: '2016-05-11 16:56:13', auxPageId: 'Arbital_path', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '10010', pageId: 'Arbital_path', userId: 'AlexeiAndreev', edit: '2', type: 'newSubject', createdAt: '2016-05-11 16:56:13', auxPageId: 'Arbital_path', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '10008', pageId: 'Arbital_path', userId: 'AlexeiAndreev', edit: '2', type: 'newRequirement', createdAt: '2016-05-11 16:56:07', auxPageId: 'Arbital_requires', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '10006', pageId: 'Arbital_path', userId: 'AlexeiAndreev', edit: '2', type: 'newRequirement', createdAt: '2016-05-11 16:56:04', auxPageId: 'Arbital_teaches', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '10003', pageId: 'Arbital_path', userId: 'AlexeiAndreev', edit: '2', type: 'newRequiredBy', createdAt: '2016-05-11 16:55:50', auxPageId: 'Arbital_author_explanations', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '8049', pageId: 'Arbital_path', userId: 'AlexeiAndreev', edit: '2', type: 'newEdit', createdAt: '2016-02-29 22:12:04', auxPageId: '', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '8048', pageId: 'Arbital_path', userId: 'AlexeiAndreev', edit: '0', type: 'newAlias', createdAt: '2016-02-29 22:11:53', auxPageId: '', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '5879', pageId: 'Arbital_path', userId: 'AlexeiAndreev', edit: '1', type: 'newEdit', createdAt: '2016-01-27 16:33:23', auxPageId: '', oldSettingsValue: '', newSettingsValue: '' }, { likeableId: '0', likeableType: 'changeLog', myLikeValue: '0', likeCount: '0', dislikeCount: '0', likeScore: '0', individualLikes: [], id: '5875', pageId: 'Arbital_path', userId: 'AlexeiAndreev', edit: '0', type: 'newParent', createdAt: '2016-01-27 15:57:48', auxPageId: 'arbital_features', oldSettingsValue: '', newSettingsValue: '' } ], feedSubmissions: [], searchStrings: {}, hasChildren: 'false', hasParents: 'true', redAliases: {}, improvementTagIds: [], nonMetaTagIds: [], todos: [], slowDownMap: 'null', speedUpMap: 'null', arcPageIds: 'null', contentRequests: {} }